题目:46. 全排列
方法一:深度优先搜索dfs,枚举每一次选取的数。
C++版本:
class Solution {
public:
vector<vector<int>> v;
vector<int> tmp;
vector<bool> sta;
int n=0;
void dfs(vector<int>& nums,int u){
if(u==n){
v.push_back(tmp);
return ;
}
for(int i=0;i<n;i++){
if(sta[i]==0){
sta[i]=1;
tmp.push_back(nums[i]);
dfs(nums,u+1);
tmp.pop_back();
sta[i]=0;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
n=nums.size();
sta.assign(n,0);
dfs(nums,0);
return v;
}
};
JAVA版本:
class Solution {
List<List<Integer>> v =new ArrayList<>();
List<Integer> tmp = new ArrayList<>();
boolean[] sta;
int n=0;
void dfs(int[] nums,int u){
if(u==n){
v.add(new ArrayList<>(tmp));
return ;
}
for(int i=0;i<n;i++){
if(sta[i]==false){
sta[i]=true;
tmp.add(nums[i]);
dfs(nums,u+1);
tmp.remove(tmp.size()-1);
sta[i]=false;
}
}
}
public List<List<Integer>> permute(int[] nums) {
n=nums.length;
sta =new boolean[n];
dfs(nums,0);
return v;
}
}
方法二:使用next_permutation()函数。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> v;
do{
v.push_back(nums);
}while(next_permutation(nums.begin(),nums.end()));
return v;
}
};