Multiply Strings - LeetCode
2015-05-08 05:12
288 查看
思路:
如果num1有i位,num2有j位。结果最多有(i+j)位, 例如99*99 = 9801
结果中的某位置的数和两个乘数是有关的。
res[3]位 = num1的第0个数 * num2的第3个数 + num1的第1个数*num2的第2个数 + num1的第3个数+ num2的第0个数 + 进位。
注意:这里num1第0个数(最低位)是指i = 0, num[num1.length()-1-i]
注意:当一个数乘完还要将最后的进位放入下一位中。
注意:输入的数可能是“00001234” 太坏了。
时间复杂度:
两个for循环,O(mn)
Code (C++):
如果num1有i位,num2有j位。结果最多有(i+j)位, 例如99*99 = 9801
结果中的某位置的数和两个乘数是有关的。
res[3]位 = num1的第0个数 * num2的第3个数 + num1的第1个数*num2的第2个数 + num1的第3个数+ num2的第0个数 + 进位。
注意:这里num1第0个数(最低位)是指i = 0, num[num1.length()-1-i]
注意:当一个数乘完还要将最后的进位放入下一位中。
注意:输入的数可能是“00001234” 太坏了。
v[i+num2.length()] += carry;
时间复杂度:
两个for循环,O(mn)
Code (C++):
class Solution { public: string multiply(string num1, string num2) { if(num1.length()==0 || num2.length()== 0) return 0; vector<int> v(num1.length()+num2.length(), 0); for(int i = 0; i < num1.length(); i++) { int a = num1[num1.length()-1-i]-'0'; int carry = 0; for(int j = 0; j < num2.length(); j++) { int b= num2[num2.length()-1-j] - '0'; v[i+j] += a*b+carry; carry = v[i+j]/10; v[i+j]%=10; } v[i+num2.length()] += carry; } int i = v.size()-1; //004321000,后面三个0,因为是高位的0所以一定是,"0001234"这样的string干的 while(i>0&&v[i]==0) i--; string res = ""; while(i>=0) //004321 => 123400 res += to_string(v[i--]); return res; } };
相关文章推荐
- LeetCode_OJ【43】Multiply Strings
- 【Leetcode】之Multiply Strings
- LeetCode 43题之 Multiply Strings
- leetcode Multiply Strings 字符串的乘积问题
- 【LeetCode】Multiply Strings
- leetcode -- Multiply Strings -- python容易处理,需要看其他解法
- Leetcode: Multiply Strings
- Leetcode127: Multiply Strings
- LeetCode - Multiply Strings
- leetcode:Multiply Strings
- Multiply Strings--LeetCode
- Leetcode--Multiply Strings
- 【LeetCode】Multiply Strings
- leetcode - Multiply Strings
- leetcode--Multiply Strings
- [LeetCode] Multiply Strings 字符串相乘
- LeetCode OJ Multiply Strings
- LeetCode--Multiply Strings
- Multiply Strings -- leetcode
- [LeetCode]Multiply Strings@python