题目描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路
回溯思想。因为没有重复数字所以比较简单。
代码
class Solution {
public:
vector<vector<int>> res;
vector<vector<int>> permute(vector<int>& nums) {
int n = nums.size();
if (n == 0) return res;
vector<bool> visit(n, false);
vector<int> tmp;
dfs(nums, tmp, visit);
return res;
}
void dfs(vector<int>& nums, vector<int>& tmp, vector<bool>& visit){
if (tmp.size() == nums.size()) {
res.emplace_back(tmp);
return;
}
for (int i = 0; i < nums.size(); ++i){
if (!visit[i]){
visit[i] = true;
tmp.emplace_back(nums[i]);
dfs(nums, tmp, visit);
visit[i] = false;
tmp.pop_back();
}
}
}
};