欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 78 子集 中等难度

发布时间:2025/5/22 编程问答 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 LeetCode 78 子集 中等难度 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

78 子集

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

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

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

解题思路:
大概的思路就是每个数字只有两个选择,要么选择,要么不选择。就是回溯算法(深度优先搜索)。想象一棵树。
1.先写出深度优先算法函数;
函数定义:利用引用把值传回主函数;
2.主函数调用
3.在树的最底层把遍历结果放在result里

代码:

class Solution { public:vector<vector<int>> subsets(vector<int>& nums) {vector<int> item; //每个节点产生的新值vector<vector<int>> result; //总结果存储int n=nums.size();generate(n,nums,item,result);//n代表深度return result;} private:void generate(int i,vector<int>& nums,vector<int>& item,vector<vector<int>> &result) {if(i==0) {result.push_back(item); //到树的最深处后把选择的结果放在总结果里return; // 如果超过N层,则说明结束}int n=nums.size(); item.push_back(nums[n-i]); //选择nums,进一步 树的左支generate(i-1,nums,item,result);item.pop_back(); //退一步generate(i-1,nums,item,result);} };

注意:

  • 首先是结果的选择,需要放在判断if里,如果到了树的最底层,就把结果放在rusult里
  • 一开始并不需要把空的item放到result里,因为最右端就是一条空的值。
  • 总结

    以上是生活随笔为你收集整理的LeetCode 78 子集 中等难度的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。