LeetCode 43 Multiply Strings

本文深入探讨了字符串相乘的算法思路,并通过代码实例展示了如何将两个字符串表示的数字相乘并返回结果字符串。重点介绍了处理边界问题和进位的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Multiply Strings

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

Subscribe to see which companies asked this question

解法思路:

这是一道经典的题目,我们要实现的就是基本的乘法运算,这里的难点就是边界问题以及进位的问题,为了处理位运算,我们把字符串获得的结果直接放在整型二维数组中,对二维数组里面的值进行运算。当然这里要注意ASCII码和数字的转换。最后对二维数组的结果求和,然后还原为字符串。

代码如下:

public String multiply(String num1, String num2) {
     	int len1 = num1.length();
 	int len2 = num2.length();
 	if(len1==1&&len2==1){
 		int k = num1.charAt(0)-'0';
 		int g=num2.charAt(0)-'0';
 		return String.valueOf(k*g);
 	}
 	int [][]re1 = new int[len2][len1+len2];//考虑进位 
 	for (int i = len2-1; i >= 0; i--) {
 		int k = num2.charAt(i)-'0';
 		int type = 0;
			for (int j = len1-1; j >= 0; j--) {
			int g=num1.charAt(j)-'0';
			int r = k*g;
			if(type != 0){
			    r+=type;	
				type = 0;
			}
			if(r/10>=1){
				type = r/10;
				r -=10*(r/10);
			}
			re1[i][j+1]+=r;
			}
			//
			int t = 0;
		 	if(type>0){
		 		re1[i][0]+=type;
		 	}
		}

 	//字符串求和
 	int rlen = re1.length;
 	int t1 = re1[rlen-1].length;
 	int []result = new int[rlen + t1 -1];
 	Arrays.fill(result, -1);
 	for (int i = 0; i < re1.length; i++) {
			for (int j = 0; j < re1[i].length-i; j++) {
				int g = re1[i][j];
				if(result[j+i]==-1)result[j+i]=0;
					result[j+i]+=g;

			}
		}
 	for (int i = result.length-1; i > 0; i--) {
			if(result[i]>=10){
				result[i-1]+=result[i]/10;
				result[i]-=10*(result[i]/10);
			}
		}
 	String resu = "";
 	int type =0;
 	for (int i = 0; i <=result.length-1; i++) {
 		if(type ==0&&result[i]==0){
 			continue;
 		}else{
 			if(result[i]!=-1){
 	 		String t = String.valueOf(result[i]);
 				resu = resu.concat(t);	
 				type =1;}
 		}
		}
 	if(resu.length()==0){
 		return "0";
 	}
  return resu; 
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值