leetcode78——Subsets

本文介绍了一种使用回溯法求解给定数组所有可能子集的方法。该算法适用于不含重复元素的数组,通过递归实现不同长度子集的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:求出所给数组的所有子集,数组中没有相同数字

分析:回溯法。和上一道题一样,只不过上一道题k值固定,而这道题的k要从1~nums.size()。

代码:

class Solution {
public:
vector<vector<int>> ans;
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> tmp;
ans.push_back(tmp);
sort(nums.begin(), nums.end());
for (int k = 1;k <= nums.size();k++) {
dfs(0, 0, k, nums, tmp);  //层次step,起始数nums[0],递归终止条件k
}
return ans;
}
void dfs(int step, int num, int k, vector<int>& nums, vector<int>& tmp) {
if (step == k) {
ans.push_back(tmp);
return;
}
for (int i = num;i < nums.size();i++) {
tmp.push_back(nums[i]);
dfs(step + 1, i + 1, k, nums, tmp);
tmp.pop_back();
}
}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值