算法(LeetCode_78_子集)

算法

:今天的每日一题是78题,很巧的是和我上次记录的博客题号连上,这道题光看题就肯定很容易出思路,无非是高中数学。但主要麻烦在实现。
来源:力扣(LeetCode)
链接:子集

题目

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

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

示例:

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

思路

  • 一看题目就应该明白,排列组合,无非一层一层往上堆,从第一个元素往后遍历就不会重复。
  • 这里我用的方法是递归回溯实现,多说无益,直接上代码

c++代码

#include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
    vector<vector<int>> r;
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<int> a;
        r.push_back(a);
        subsets(nums, a, 0);
        return r;
    }
    void subsets(vector<int>& nums,vector<int>& a,int p) {
        for (int i = p; i < nums.size(); i++)
        {
            a.push_back(nums[i]);
            r.push_back(a);
            subsets(nums, a, i+1);
            a.pop_back();
        }
    }
};
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页