欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(3)
目录
👉🏻全排列
原题链接: 全排列
mycode:
cpp
class Solution {
public:
vector<vector<int>> ret;
vector<int> path;
bool check[7];//检查该位置是否被用过了,true说明被用过了
void dfs(vector<int>& nums)
{
if(nums.size()==path.size())//说明此时已经组成一个序列了
{
ret.push_back(path);
return;
}
for(int i = 0;i<nums.size();i++)
{
if(check[i]==false)//此时还没被用过
{
path.push_back(nums[i]);
check[i] = true;
dfs(nums);
//回溯清空现场,将dfs下层插入的元素pop掉
path.pop_back();
check[i] = false;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
dfs(nums);
return ret;
}
};
👉🏻子集
原题链接: 子集
mycode:
cpp
class Solution {
public:
vector<vector<int>> ret;
vector<int> part;
void dfs(vector<int>& nums,int n)
{
//可以选择插入或选择不插入
for(int i = n;i<nums.size();i++)
{
part.push_back(nums[i]);
dfs(nums,++n);
//回溯清理现场
part.pop_back();
}
ret.push_back(part);
}
vector<vector<int>> subsets(vector<int>& nums) {
int n = 0;
dfs(nums,n);
return ret;
}
};
解法二 :
mycode:
cpp
class Solution {
public:
vector<vector<int>> ret;
vector<int> part;
void dfs(vector<int>& nums,int n)
{
//可以选择插入或选择不插入
for(int i = n;i<nums.size();i++)
{
part.push_back(nums[i]);
dfs(nums,i+1);
//回溯清理现场
part.pop_back();
}
ret.push_back(part);
}
vector<vector<int>> subsets(vector<int>& nums) {
int n = 0;
dfs(nums,n);
return ret;
}
};