题目:https://oj.leetcode.com/problems/permutations/
题意:求一个数组的各种排列方法
思路:回溯,这题A的我莫名其妙,本来打算考虑一下有没有重复的可能,但是貌似这题不用考虑还是怎么回事的,直接就A了
代码:
class Solution {
public:
vector<vector<int> > result;
void swap(int &a,int &b){
int tmp;
tmp = b;
b = a;
a = tmp;
}
void dfs(int dep,vector<int> num){
if(dep == num.size()){
result.push_back(num);
return;
}
for(int i = dep;i<num.size();i++){<span style="white-space:pre"> </span>//这里i从dep开始,而不是从dep+1开始,从dep开始并没有影响,也就多换一次,如果从dep+1开始换,则达不到结果
swap(num[i],num[dep]);
dfs(dep+1,num);
swap(num[i],num[dep]);
}
}
vector<vector<int> > permute(vector<int> &num) {
result.clear();
if(num.size() == 0) return result;
dfs(0,num);
return result;
}
};