LeetCode 46 Permutations + LeetCode 47 Permutations II
2017-05-25 19:21
711 查看
题意:
给出一串(46题)不重复or(47题)有重复的数字,要求输出所有排列。
思路:
有没有重复不影响思路 = =。 代码展示为46题提交结果,47题一样过……
可以偷懒用next_permutation方法也可以自己实现,实现方法为从后往前找第一个出现的nums[i] < nums[i+1],从i后面找出比nums[i]稍大一点的数字nums[x],交换nums[i]和nums[x],反序i后面的部分。
代码:
给出一串(46题)不重复or(47题)有重复的数字,要求输出所有排列。
思路:
有没有重复不影响思路 = =。 代码展示为46题提交结果,47题一样过……
可以偷懒用next_permutation方法也可以自己实现,实现方法为从后往前找第一个出现的nums[i] < nums[i+1],从i后面找出比nums[i]稍大一点的数字nums[x],交换nums[i]和nums[x],反序i后面的部分。
代码:
/** * 自己实现 13ms */ class Solution { public: vector<vector<int>> permute(vector<int> &nums) { vector<vector<int>> ans; sort(nums.begin(), nums.end()); ans.push_back(nums); for (;;) { int id = -1; for (int i = nums.size() - 1; i > 0; --i) { if (nums[i] > nums[i - 1]) { id = i - 1; break; } } if (id == -1) { break; } for (int i = nums.size() - 1;; --i) { if (nums[i] > nums[id]) { swap(nums[i], nums[id]); reverse(nums.begin() + id + 1, nums.end()); break; } } ans.push_back(nums); } return ans; } }; /** * 偷懒用next_permutation 19ms */ class Solution { public: vector<vector<int>> permute(vector<int> &nums) { vector<vector<int>> ans; sort(nums.begin(), nums.end()); ans.push_back(nums); while (next_permutation(nums.begin(), nums.end())) { ans.push_back(nums); } return ans; } };
相关文章推荐
- LeetCode46,47 Permutations, Permutations II
- Leetcode 46/47 Permutations, Permutations II
- Leetcode 46. Permutations & 47. Permutations II
- LeetCode-----46.Permutations&&47.Permutations II (全排列----回溯法)
- leetcode-46、47 Permutations/II 数字的排列组合
- LeetCode 43.Multiply Strings & 46.Permutations & 47.Permutations II
- LeetCode 46/47. Permutations i, ii
- [LeetCode 46 & 47] Permutations I & II
- leetcode46/47-Permutations I/II(全排列问题)
- LeetCode(46) Permutations
- Leetcode 47. Permutations II (Medium) (cpp)
- 46、47-Permutations
- leetcode[46]Permutations
- leetcode 46: Permutations
- LeetCode 46:Permutations
- Leetcode 47. Permutations II
- LeetCode 46 - Permutations
- ?47. Permutations II leetcode java
- LeetCode46_Permutations
- leetcode 47. Permutations II