首页 > 代码库 > LeetCode46,47 Permutations, Permutations II
LeetCode46,47 Permutations, Permutations II
题目:
LeetCode46 I
Given a collection of distinct numbers, return all possible permutations. (Medium)
For example,[1,2,3]
have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]
LeetCode47 II
Given a collection of numbers that might contain duplicates, return all possible unique permutations.(Medium)
For example,[1,1,2]
have the following unique permutations:
[ [1,1,2], [1,2,1], [2,1,1]]
分析: 首先先用next_permutation解这两个题。用好STL。
Permutations I:
1 class Solution { 2 public: 3 vector<vector<int>> permute(vector<int>& nums) { 4 vector<vector<int>> result; 5 int len = nums.size(); 6 sort(nums.begin(), nums.end()); 7 do { 8 result.push_back(nums); 9 } while (next_permutation(nums.begin(),nums.end()));10 11 return result;12 }13 };
Permutations II:
1 class Solution { 2 public: 3 vector<vector<int>> permuteUnique(vector<int>& nums) { 4 vector<vector<int>> result; 5 int len = nums.size(); 6 sort(nums.begin(), nums.end()); 7 do { 8 result.push_back(nums); 9 } while (next_permutation(nums.begin(),nums.end()));10 11 return result;12 }13 };
当然,用STL写好的函数肯定不是面试的目的,permutation的递归方法也是经典的回溯算法题。
代码:
1 class Solution { 2 private: 3 vector<vector<int>> result; 4 void helper(vector<int>& nums, int start, int end) { 5 if (start == end) { 6 result.push_back(nums); 7 } 8 for (int i = start; i <= end; ++i) { 9 swap(nums[start], nums[i]);10 helper(nums, start + 1, end);11 swap(nums[start], nums[i]);12 }13 }14 public:15 vector<vector<int>> permute(vector<int>& nums) {16 helper(nums, 0, nums.size() - 1);17 return result;18 }19 };
LeetCode46,47 Permutations, Permutations II
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。