dfs 的应用
这道题我们依旧可以通过使用 dfs 的思想,也就是回溯的方法来做。举个例子:1,2,3的全排列为
[1,2,3],[1,3,2]
[2,1,3],[2,3,1]
[3,1,2],[3,2,1]
通过观察我们可以看出,以 1 开头的全排列实际上就是,[ 1, [2,3] 的全排列 ] ===> [1,2,3]、[1,2,3],通过这种方法我们可以很容易想到以 1 开头的全排列也是,[1,2, [3]的全排列 ]、[1,3,[2]的全排列 ],以此类推,我么可以得到[1,2,3]的全排列。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> ans;
dfs(ans, nums, 0);
return ans;
}
void dfs(vector<vector<int>>& ans, vector<int>& nums, int start){
if(start == nums.size()){
ans.push_back(nums);
}else{
for(int i = start; i < nums.size(); i++){
swap(nums[start],nums[i]);
dfs(ans, nums, start+1);
swap(nums[start],nums[i]);
}
}
}
};