Leetcode: Multiply Strings
2014-12-04 15:01
309 查看
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.
分析:对于此题,如果按照平时我们算乘法的办法,先将乘数的第一位乘以被乘数,然后第二位乘以被乘数,。。直到乘数的最后一位乘以被乘数,然后把上述结果错位相加。这里有一个规律,被乘数第i位和乘数第j位相乘的结果将加在结果的第i+j和第i+j+1位(模10的余数在第i+j位,进位在第i+j+1位),那么我们可以很方便的实现两个字符串的乘法。代码如下:
transform函数的运用使代码行数更少,find_if(res.begin(), prev(res.rend()), [](int i){return i > 0;})除去结果中的preceding zeroes同时由于使用prev(res.rend())保护了只有一个0的情况。
Note: The numbers can be arbitrarily large and are non-negative.
分析:对于此题,如果按照平时我们算乘法的办法,先将乘数的第一位乘以被乘数,然后第二位乘以被乘数,。。直到乘数的最后一位乘以被乘数,然后把上述结果错位相加。这里有一个规律,被乘数第i位和乘数第j位相乘的结果将加在结果的第i+j和第i+j+1位(模10的余数在第i+j位,进位在第i+j+1位),那么我们可以很方便的实现两个字符串的乘法。代码如下:
class Solution { public: string multiply(string num1, string num2) { string result; int n1 = num1.length(), n2 = num2.length(); if(n1 == 0 || n2 == 0) return result; vector<int> res(n1+n2, 0);//use vector stores multiply result reverse(num1.begin(), num1.end());//reverse string reverse(num2.begin(), num2.end()); for(int i = 0; i < n1; i++){ int v1 = num1[i] - '0'; for(int j = 0; j < n2; j++){ int v2 = num2[j] - '0'; res[i+j] += v1*v2; res[i+j+1] += res[i+j]/10; res[i+j] %= 10; } } transform(find_if(res.rbegin(), prev(res.rend()), [](int i){return i > 0;}),res.rend(), back_inserter(result), [](int i){return i + '0';});//transform each int in vector<int> to char, also remove preceding zeroes but the last zero return result; } };
transform函数的运用使代码行数更少,find_if(res.begin(), prev(res.rend()), [](int i){return i > 0;})除去结果中的preceding zeroes同时由于使用prev(res.rend())保护了只有一个0的情况。
相关文章推荐
- LeetCode 43: Multiply Strings
- LeetCode Multiply Strings
- LeetCode Multiply Strings
- [Leetcode]Multiply Strings
- LeetCode(43)Multiply Strings
- [LeetCode] Multiply Strings
- LeetCode 43 Multiply Strings
- [LeetCode]Multiply Strings
- #leetcode#Multiply Strings
- Multiply Strings leetcode
- LeetCode Multiply Strings(大整数相乘)
- LeetCode: Multiply Strings. Java
- [LeetCode]Multiply Strings
- Multiply Strings leetcode
- [LeetCode] Multiply Strings 字符串相乘
- LeetCode43_Multiply Strings
- leetcode 043 Multiply Strings
- [leetcode] Multiply Strings
- leetcode(43) - Multiply Strings
- LeetCode: Multiply Strings [042]