Leetcode 46. Permutations
给定一个包含不同整数的集合,生成所有可能的排列。
class Solution { public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> result; help(nums, 0, result); return result; } // permute num[begin..end] // invariant: num[0..begin-1] have been fixed/permuted void help(vector<int>& nums, int begin, vector<vector<int>>& result){ if(begin >= nums.size()){ // one permutation instance result.push_back(nums); return; } for(int i = begin; i < nums.size(); ++i){ swap(nums[i], nums[begin]); help(nums, begin + 1, result); // reset swap(nums[i], nums[begin]); } } };
Leetcode 47. Permutations II
给定一个可能包含重复整数的集合,生成所有可能的排列。
分析:值传递?
class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> result; sort(nums.begin(), nums.end()); help(nums, 0, result); return result; } void help(vector<int> nums, int begin, vector<vector<int>>& result){ if(begin == nums.size() - 1){ result.push_back(nums); return; } for(int i = begin; i < nums.size(); ++i){ if(i != begin && nums[i] == nums[begin]) continue; else{ swap(nums[begin], nums[i]); help(nums, begin + 1, result); } } } };
原文:https://www.cnblogs.com/betaa/p/11679179.html