给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入:
输入: [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) {
if(nums.empty()) return res;
vector<int> track;
backtrack(nums, track);
return res;
}
void backtrack(vector<int>& nums, vector<int>& track) {
if(nums.size() == track.size()) {
res.push_back(track);
return;
}
for(int i = 0; i < nums.size(); ++i) {
auto it = find(track.begin(), track.end(), nums[i]);
if(it != track.end()) continue;
track.push_back(nums[i]);
backtrack(nums, track);
track.pop_back();
}
}
};