Multiply Strings - LeetCode
来源:互联网 发布:xp下安装linux双系统 编辑:程序博客网 时间:2024/06/04 18:10
思路:
如果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; }};
0 0
- LeetCode: Multiply Strings
- LeetCode Multiply Strings
- LeetCode: Multiply Strings
- [Leetcode] Multiply Strings
- [LeetCode] Multiply Strings
- [Leetcode] Multiply Strings
- LeetCode 45: Multiply Strings
- [LeetCode]Multiply Strings
- [LeetCode] Multiply Strings
- LeetCode-Multiply Strings
- [leetcode] Multiply Strings
- LeetCode - Multiply Strings
- Leetcode: Multiply Strings
- LeetCode题解:Multiply Strings
- leetcode Multiply Strings
- LeetCode Multiply Strings
- LeetCode | Multiply Strings
- [LeetCode] Multiply Strings
- linux的 .bashrc文件是干什么的?
- 算法分析: 求最长的递增数列
- Linux: grep command
- 编译器优化对函数的影响
- Leetcode NO.199 Binary Tree Right Side View
- Multiply Strings - LeetCode
- Java String.length()
- 黑马程序员IOS基础---C语言学习之基本运算
- MongoDB 基础(五)备份还原与导出导入
- MongoDB 基础(四)Red Hat Enterprise 6.4 x64 安装MongDB 3.0及配置
- MongoDB 基础(一)Windows XP 32位安装mongodb及其目录结构和配置
- MFC选择文件夹对话框,选择文件路径
- 构建自己的AngularJS,第一部分:Scope和Digest
- hadoop三个配置文件的参数含义说明