热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode:78子集回溯法

给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入:n

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路

在区间[begin, end]中取n个数字,问题转换为:

  • 在区间[begin, i]中取一个数 + 在区间[i+1, end]中取n-1个数

穷举所有可能的i,列出结果,因为给定的数组没有重复的元素,下标不同则元素不同,可以直接按照上述规则取元素

代码

x :现在取到第几个数了
len :要取的数的数目
begin :区间[begin, end]的左端点,右端点表示数组结尾
nums :题目给定数组
temo :用来保存一次答案的临时数组

class Solution {
public:vector<vector<int>> ans;void dfs(int x, int len, int begin, vector<int>& nums, vector<int>& temp){if(x&#61;&#61;len)ans.push_back(temp);for(int i&#61;begin; i<nums.size(); i&#43;&#43;){temp.push_back(nums[i]);dfs(x&#43;1, len, i&#43;1, nums, temp);temp.pop_back();}}vector<vector<int>> subsets(vector<int>& nums){vector<int> t;for(int i&#61;0; i<&#61;nums.size(); i&#43;&#43;)dfs(0, i, 0, nums, t);return ans;}
};


推荐阅读
author-avatar
mobiledu2502938445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有