Given a collection of distinct 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], [3,2,1] ]
列出一个数组的所有排列。想法是对于第一个数,有n种情况,对于这n种情况,分别求其[1:n]子数组的所有排列,这里递归进行即可。
代码:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
permute_helper(nums, 0, res);
return res;
}
private:
void permute_helper(vector<int>& nums, int l, vector<vector<int>>&res) {
if(l == nums.size()-1) {
res.push_back(nums);
return;
}
for(int i = l; i < nums.size(); ++i) {
swap(nums[l], nums[i]);
permute_helper(nums, l+1, res);
swap(nums[l], nums[i]);
}
}
};