一、题目描述:
二、思路分析:
怎么回事?回溯也不难啊 这不就是当他是一个树,dfs遍历下就完事了吗?
- 怎么确定哪个点用过,哪个点没用过?
通过bool 数组,那么每个方法都有一个布尔数组吗?,不用只需要一个,但是调用函数以后需要回退一样
回溯的精髓就是这个回退吧
我错了!欸我反悔了
- res是只需要一个吗
对的,不能多个
-
path是只需要一个吗? 必不能够,那样你
res.push_back(path)不就都一个值了? -
你为什么总是在问,需要一个还是每个方法各一个
这是让你去想各种语言的参数传递规则
三、AC 代码:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
vector<bool> isused;
int n = nums.size();
int depth = 0;
vector<int> path;
for(int i = 0; i < nums.size(); i ++){
isused.push_back(false);
}
dfs(nums, n, depth, path, isused, res);
return res;
}
void dfs(vector<int>& nums, int len, int depth, vector<int> path, vector<bool>& used, vector<vector<int>>& res){
if(len == depth){
res.push_back(path);
return ;
}
for(int i = 0; i < nums.size(); i++){
if(!used[i]){
// false 说明没人用过
path.push_back(nums[i]);
used[i] = true;
dfs(nums, len, depth + 1, path, used, res);
used[i] = false;
path.pop_back();
}
}
return;
}
};
四、总结:
因为这题不会回溯,所以被问个TCP三次握手继承多态就到了喜闻乐见的你还有什么问题要问我吗 这个环节了
引以为耻,引以为戒
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情