LeetCode - Multiply Strings
2015-03-30 00:51
344 查看
https://leetcode.com/problems/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.
这道题是把乘法转换成每一位相乘,然后把结果加到对应位上。
因为长度分别为len1, len2的两个数相乘,结果不会超过len1+len2,所以先用一个整型数组来保存结果。
两个数中下标为i, j的位相乘的结果应该对应到结果数组中的 i+j+1位,并且如果有进位,进位的值对应到i+j位甚至更小的位,加的时候要注意进位的问题。注意,这里下标越大,在整数中对应越低的位。
最后把整型数组输出到StringBuilder中,注意,如果结果为0的话,那么整型数组所有数都是0。则直接返回“0”就行了。
代码如下:
时间复杂度是 O(len1*len2),考虑进位的时间的话应该是O(len1*len2*(len1+len2)),但进位一般进不了这么多,所以这是worst case。
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.
这道题是把乘法转换成每一位相乘,然后把结果加到对应位上。
因为长度分别为len1, len2的两个数相乘,结果不会超过len1+len2,所以先用一个整型数组来保存结果。
两个数中下标为i, j的位相乘的结果应该对应到结果数组中的 i+j+1位,并且如果有进位,进位的值对应到i+j位甚至更小的位,加的时候要注意进位的问题。注意,这里下标越大,在整数中对应越低的位。
最后把整型数组输出到StringBuilder中,注意,如果结果为0的话,那么整型数组所有数都是0。则直接返回“0”就行了。
代码如下:
public String multiply(String num1, String num2) { int len1 = num1.length(); int len2 = num2.length(); if(len1==0 || len2==0) return ""; int[] a = new int[len1+len2]; Arrays.fill(a, 0); for(int i=len1-1; i>=0; i--){ for(int j = len2-1; j>=0; j--){ int d1 = num1.charAt(i)-'0'; int d2 = num2.charAt(j)-'0'; int rst = d1*d2; int carry = (a[i+j+1]+rst)/10; a[i+j+1] = (a[i+j+1]+rst)%10; int index = i+j; while(carry!=0){ int nrst = a[index]+carry; carry = nrst/10; a[index] = nrst%10; index--; } } } StringBuilder val = new StringBuilder(); int i = 0; while(i<a.length && a[i] == 0) i++; if(i==a.length) return "0"; while(i<a.length){ val.append(a[i]); i++; } return val.toString(); }
时间复杂度是 O(len1*len2),考虑进位的时间的话应该是O(len1*len2*(len1+len2)),但进位一般进不了这么多,所以这是worst case。
相关文章推荐
- LeetCode-Multiply Strings
- LeetCode--Multiply Strings
- LeetCode Multiply Strings
- 【Leetcode】【python】Multiply Strings
- Leetcode 43 Multiply Strings
- LeetCode---Multiply Strings
- leetcode(43) - Multiply Strings
- Multiply Strings--LeetCode
- leetcode--Multiply Strings
- [leetcode] Multiply Strings
- [Leetcode] #43 Multiply Strings
- Leetcode_multiply-strings (updated c++ and python version)
- leetcode Multiply Strings
- LeetCode Multiply Strings 大数相乘
- 【leetcode】Multiply Strings
- [LeetCode] 415 Add Strings && 67 Add Binary && 43 Multiply Strings
- Multiply Strings leetcode java
- LeetCode: Multiply Strings
- Multiply Strings leetcode
- LeetCode Multiply Strings(大整数相乘)