LeetCode (43) Multiply Strings
2017-09-02 11:23
411 查看
按照常规解法,用字符串操作来模拟乘法的步骤可以先实现字符串高精度加法,再将加法运用到乘法过程中。这种方法简单但是耗时比较大,这里介绍一种比较巧妙的方法,借鉴LeetCode上的一份高票代码。
观看下图,它描述的是我们计算乘法的过程。仔细分析可以发现,对于原来在上面字符串中下标为1的“2”和在下面字符串中下标为0的“4”的相乘结果08出现在了最后的乘法结果字符串的下标1和2处。这一结果对其他下标的数字同样成立:下标i和下标j相乘的高位结果位于下标i+j处,低位位于下标i+j+1处。根据这个结果,实现高精度的乘法就变得简单了。
实现代码如下:
观看下图,它描述的是我们计算乘法的过程。仔细分析可以发现,对于原来在上面字符串中下标为1的“2”和在下面字符串中下标为0的“4”的相乘结果08出现在了最后的乘法结果字符串的下标1和2处。这一结果对其他下标的数字同样成立:下标i和下标j相乘的高位结果位于下标i+j处,低位位于下标i+j+1处。根据这个结果,实现高精度的乘法就变得简单了。
实现代码如下:
class Solution { public: string multiply(string num1, string num2) { int m=num1.size(); int n=num2.size(); vector<int> array(m+n); string ans=""; for(int i=m-1;i>=0;i--) for(int j=n-1;j>=0;j--) { int index1=i+j; int index2=i+j+1; int sum=(num1[i]-'0')*(num2[j]-'0')+array[index2]; array[index1]+=sum/10; array[index2]=sum%10; } for(int p=0;p<array.size();p++) { if(p==0){ while(array[p]==0&&p!=array.size()-1)//找到第一个非零位 { p++; } } ans+=to_string(array[p]); } return ans; } };
相关文章推荐
- [leetcode] 43.Multiply Strings
- Leetcode 43 Multiply Strings
- [LeetCode 43] Multiply Strings
- LeetCode_OJ【43】Multiply Strings
- Leetcode Multiply Strings 43
- LeetCode_43---Multiply Strings
- LeetCode43_Multiply Strings
- LeetCode 43 Multiply Strings
- leetcode 43:Multiply Strings
- LeetCode43 Multiply Strings
- LeetCode(43) Multiply Strings
- leetcode 43. Multiply Strings
- [Leetcode 43 Multiply Strings]大数乘法,回到乘法本身的“最基础”去优化
- [Leetcode 90] 43 Multiply Strings
- ★leetcode43_Multiply Strings
- 【LeetCode】43. Multiply Strings
- 【LeetCode】C# 43、Multiply Strings
- LeetCode(43) Multiply Strings
- LeetCode-43-Multiply Strings 模拟
- LeetCode - 43. Multiply Strings