leetcode 子集

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

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

示例:

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

像这类题,选与不选,最开始想到的就是分情况递归。选1与不选1,同时要结合题意进行答案的输出。

子集包含空,最开始就把结果添加进去,然后每添加一个,就把结果添加进去。看了有的题解说的是回溯,我感觉回溯是会回头的方法,这道题的题意讲的是从不回头,因为1选了就不会再选1了,所以这里要设置现在的结果遍历到第几个了,以后都会从这个结果之后进行开始。

class Solution {
public:
    vector<vector<int>> r;
    vector<vector<int>> subsets(vector<int>& nums) {
         vector<int> res;
        solve(res,nums,0);
            return r;
    }
    void solve(vector<int> res, vector<int> nums, int start)
    {
        r.push_back(res);
        for(int i = start; i < nums.size(); i++)
        {
            res.push_back(nums[i]);
            solve(res,nums,i+1);
            res.pop_back();
        }
    }
};
诸位正值青春年少,一定恣情放纵,贪恋香艳梅施之情,喜欢风流雅韵之事,洒脱木拘。然而诸位可知,草上露一碰即落,竹上霜一触即溶,此种风情难于长久。
原文地址:https://www.cnblogs.com/shilipojianshen/p/12618626.html