LeetCode的medium题集合(C++实现)六
2015-05-17 15:43
495 查看
1 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.
该题实际就是利用字符串来解决大数的乘法问题。为了计算方便先将两组数翻转,将字符串转化为整数利用两个循环逐位相乘,将结果保存。然后逐位解决进位问题。
2 Permutations
Given a collection of numbers, return all possible permutations.For example,[1,2,3] have the following permutations:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].
前面我们已经解决过nextPermutation问题,即可以求出一组数集的下一个排列,我们可以先将这组数按升序排列,然后循环求解下一个排列直到无解为止,此时可得到这组数全部的排列组合。该方法同时解决了Permutations II.
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.
该题实际就是利用字符串来解决大数的乘法问题。为了计算方便先将两组数翻转,将字符串转化为整数利用两个循环逐位相乘,将结果保存。然后逐位解决进位问题。
[code]string multiply(string num1, string num2) { int flag = 0, len1 = num1.length(), len2 = num2.length(); reverse(num1.begin(), num1.end()); reverse(num2.begin(), num2.end()); vector<int> mid(len1 + len2, 0); string result; for (int i = 0; i<len1; i++) { for (int j = 0; j<len2; j++) { int a = num1[i] - '0'; int b = num2[j] - '0'; mid[i + j] += a*b; } } for (int m = 0; m<len1 + len2; m++) { int c = (mid[m] + flag) % 10; flag = (mid[m] + flag) / 10; mid[m] = c; } int n = len1 + len2 - 1; while (mid == 0) { n--; //去掉前面为0的元素 } if (n<0) return result += '0'; for (; n >= 0; n--) { result += ('0' + mid ); } return result; }
2 Permutations
Given a collection of numbers, return all possible permutations.For example,[1,2,3] have the following permutations:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].
前面我们已经解决过nextPermutation问题,即可以求出一组数集的下一个排列,我们可以先将这组数按升序排列,然后循环求解下一个排列直到无解为止,此时可得到这组数全部的排列组合。该方法同时解决了Permutations II.
[code] bool nextPermutation(vector<int>& nums) { bool flag=true; if (nums.size() < 2) return false; int i, k; for (i = nums.size() - 2; i >= 0; --i) if (nums[i] < nums[i+1]) break; for (k = nums.size() - 1; k > i; --k) if (nums[i] < nums[k]) break; if(i<0) flag=false; if (i >= 0) swap(nums[i], nums[k]); reverse(nums.begin() + i + 1, nums.end()); return flag; } vector<vector<int>> permute(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<vector<int> > res; bool flag=true; while(flag) { res.push_back(nums); flag=nextPermutation(nums); } return res; }
相关文章推荐
- LeetCode的medium题集合(C++实现)十二
- LeetCode的medium题集合(C++实现)十七
- LeetCode的medium题集合(C++实现)十
- LeetCode的medium题集合(C++实现)十四
- LeetCode的medium题集合(C++实现)十六
- LeetCode的medium题集合(C++实现)九
- LeetCode的medium题集合(C++实现)一
- LeetCode的medium题集合(C++实现)七
- LeetCode的medium题集合(C++实现)十五
- LeetCode的medium题集合(C++实现)五
- LeetCode的medium题集合(C++实现)十三
- LeetCode的medium题集合(C++实现)八
- LeetCode的medium题集合(C++实现)十一
- LeetCode的medium题集合(C++实现)三
- LeetCode的medium题集合(C++实现)二
- LeetCode的medium题集合(C++实现)四
- LeetCode的easy题集合(C++实现)一
- LeetCode的easy题集合(C++实现)二
- LeetCode的easy题集合(C++实现)四
- [leetcode]55. Jump Game ,C++/PYTHON实现,medium难度