题目:
思路:回溯,不过因为是c++写,又另外用了一个vector来标记当前位置的数是否使用过,就是代码里的flags;如果是python可能就不用记flags,直接每次用过了nums[i],缩短整个nums即可。
代码:
class Solution {
public:
vector<vector<int>> res;
void helper(vector<int>& nums,vector<int>& path,vector<bool>& flags){
if (path.size()==nums.size()) res.push_back(path);
for (int i=0;i<nums.size();i++){
if (flags[i]){
path.push_back(nums[i]);
flags[i]=false;
helper(nums,path,flags);
path.pop_back();
flags[i]=true;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
if (nums.size()==0) return {};
vector<bool> flags(nums.size(),true);
vector<int>path;
helper(nums,path,flags);
return res;
}
};
----
2020.4.7 第2题。