Leetcode 43. Multiply Strings

Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.

Note:
1.The length of both num1 and num2 is < 110.
2.Both num1 and num2 contains only digits 0-9.
3.Both num1 and num2 does not contain any leading zero.

4.You must not use any built-in BigInteger library or convert the inputs to integer directly.

两个数字相乘前后都有可能超过int的表示范围,所以并不能直接将二者转化为整数求乘积。

对于长度是n1,n2的两个数字,它们乘积的最大长度是n1+n2,所以可以定义一个长度是n1+n2的数组nums3用来存储结果。按照我们计算的顺序,先固定数组num1,然后取num2的数字依次与num1相乘,然后不断刷新nums3的值,直到最后求出结果。需要注意的是nums3存储的是每一位相乘之后,再相加的值

class Solution {
 	 	 public String multiply(String num1, String num2) {
	        int n1 = num1.length(),n2 = num2.length();
	        char[]nums2;
	        char[]nums1;
	        nums2 = num2.toCharArray();
        	nums1 = num1.toCharArray();
	        int[] nums3 = new int[n1+n2];
	        int n3 = n1+n2;
	        for(int i=0;i<n3;i++)
	        	nums3[i]=-1;
	        
	        if(n1==0)
	        	return num2;
	        if(n2==0)
	        	return num1;
	        if(num1.equals("0") ||num2.equals("0"))
	        	return "0";
	        int targetnum;
	        int start;
	        int flag = 0;
	        int now;
	        for(int i=n2-1;i>=0;i--)
	        {
	        	flag=0;
	        	start = nums2[i]-'0';
	        	for(int j = n1-1;j>=0;j--)
	        	{
	        		now =nums1[j]-'0';
	        		targetnum = n3-(n2-i)-(n1-j)+1;
	        		if(nums3[targetnum]==-1)
	        		{
	        			nums3[targetnum] = (now*start+flag)%10;
	        			flag=(now*start+flag)/10;
	        		}
	        		else
	        		{
	        			int temp = nums3[targetnum];
	        			nums3[targetnum] = (now*start+flag+nums3[targetnum])%10;
	        			flag=(now*start+flag+temp)/10;
	        		}
		        	
	        	}
	        	if(flag>0)
	        		nums3[n3-(n2-i)-n1] = flag;
	        }
	        
	        if(flag>0)
	        {
	        	
	        	nums3[0]= flag;
	        	StringBuffer str = new StringBuffer();
	        	for (int i = 0; i <nums3.length ; i++) {
	        	str = str.append(nums3[i]);
	        	}
	        	return str.toString();
	        	
	        }
	        else
	        {
	        	StringBuffer str = new StringBuffer();
	        	for (int i = 1; i <nums3.length ; i++) {
	        	str = str.append(nums3[i]);
	        	}
	        	return str.toString();
	        	
	        }
	    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值