46. 全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
class Solution {
public:
void DFS(vector<vector<int>>& ans,vector<int>& vis,vector<int>& nums,vector<int>& temp){
if(temp.size() == vis.size()) ans.push_back(temp);
for(int i = 0;i < nums.size();i++){
if(vis[i] == 0){
temp.push_back(nums[i]);
vis[i] = 1;
DFS(ans,vis,nums,temp);
temp.erase(temp.end() - 1);
vis[i] = 0;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<int>vis(nums.size(),0);
vector<int>temp;
vector<vector<int>>ans;
DFS(ans,vis,nums,temp);
return ans;
}
};
解题思路:DFS + 回溯,利用访问数组vis来存储是否已经访问过,回溯需要两步,去掉temp上的最后一位,以及vis数组变成0.