题目描述
blablabla
样例
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<vector<int>> permutation(vector<int>& nums) {
path.resize(nums.size());
dfs(nums, 0, 0, 0);//数组,当前要放的元素位置,上一个放的位置,当前的放的状态。
return res;
}
void dfs(vector<int> & nums, int u, int start, int state) {
if (u == nums.size()) {
res.push_back(path);
return;
}
if (!u || nums[u] != nums[u-1]) start = 0;
for (int i = start; i < nums.size(); i ++){
if(! (state >> i & 1)){
path[i] = nums[u];
dfs(nums, u + 1, i + 1, state + (1 << i));//上一个放的位置是i;
}
}
}
};
想问一下这里为什么不用恢复现场呀
因为这里的状态state是作为参数传入下一层的,而当前层的state不变,因此即使path[i]确实被赋值了,但当前层仍以为path[i]没被赋值,因此++i后,i位置实际上还是可以被赋值的;
姜维打击,不是姜维而是降维打击。hh
# 样例怎么变成代码了!!!!!