LeetCode——Multiply Strings

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

  • Example 1:
    Input: num1 = “2”, num2 = “3”
    Output: “6”
  • Example 2:
    Input: num1 = “123”, num2 = “456”
    Output: “56088”
    Note:
    The length of both num1 and num2 is < 110.
    Both num1 and num2 contain only digits 0-9.
    Both num1 and num2 do not contain any leading zero, except the number 0 itself.
    You must not use any built-in BigInteger library or convert the inputs to integer directly.

解法

把两个数中的每一位相乘存到数组中的对应位,然后从低位开始处理每一位的进位,手写两个数相乘再结合代码会比较好理解。

       index:  0 1 2 3 4                
                    1 2 3
                *     4 5
                ---------
                      1 5   
                    1 0
                  0 5         
                ---------     
                    1 2 
                  0 8
                0 4
                ---------
                0 5 5 3 5
public String multiply(String num1, String num2) {
        int n=num1.length(),m=num2.length();
        int[] sums=new int[m+n];
        int k=n+m-2,carry=0;
        for(int i=0;i<n;i++)
        {
        	for(int j=0;j<m;j++)
        	{
        		sums[k-i-j]+=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
        	}
        }
        for(int i=0;i<n+m;i++)
        {
        	sums[i]+=carry;
        	carry=sums[i]/10;
        	sums[i]=sums[i]%10;
        }
        int i=n+m-1;
        while(i>=0&&sums[i]==0)
        	--i;
        if(i<0)
        	return "0";
        String res="";
        while(i>=0)
        {
        	res=res+sums[i--];
        }
        return res;
    }

Runtime: 11 ms, faster than 97.52% of Java online submissions for Multiply Strings.
Memory Usage: 38.5 MB, less than 84.50% of Java online submissions for Multiply Strings.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值