Permutations 全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。
输入:
[1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
方法一:
用visited数组记录是否被访问。递归一次得到一个组合,之后将visited清零。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>>res;
vector<int>out,visited(nums.size(),0);
helper(out,0,nums,visited,res);
return res;
}
void helper(vector<int>& out,int level,vector<int>& nums,vector<int>& visited,vector<vector<int>>& res){
if(level==nums.size()) {
res.push_back(out);return;
}
for(int i=0;i<nums.size();i++){
if(visited[i]==1) continue;
visited[i]=1;
out.push_back(nums[i]);
helper(out,level+1,nums,visited,res);
out.pop_back();//完成一次递归之后清零
visited[i]=0;//完成一次递归之后清零
}
}
};
若有重复数字呢?
1.首先对数组排序 2.递归时注意去重