leetcode题目例题解析(二)

leetcode题目例题解析(二)

Subsets

题目描述:

    Given a set of distinct integers, nums, return all possible subsets.
    Note: The solution set must not contain duplicate subsets.
    For example,
    If nums = [1,2,3], a solution is:
    [[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]

题意解析:

这道题不是很难,找出一个集合的所有子集,需要注意的是:
1.空集也包括
2.不能出现重复的集合

解题思路:

这道题就是一个排列组合的题目,排列组合我们可以通过递归的函数来实现,每一层都决定一个元素是否添加到结果中,这样有n个元素的集合,一共有2^n个子集。

代码:

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        int len = nums.size();
        vector<vector<int>> ans;
        vector<int> one;
        find(nums, one, ans, 0, len);
        return ans;
    }
    /*这里要注意的是,传递的第二个参数是值传递的,这里不能用引用传递,保证结果之间不会相互影响。*/
    void find(vector<int>& nums, vector<int> one, vector<vector<int>> &ans, int deep, int max) {
        if (deep == max) {
            ans.push_back(one);
        } else {
            find(nums, one, ans, deep+1, max);
            one.push_back(nums[deep]);
            find(nums, one, ans, deep+1, max);
        }
    }
};

原题目链接:
https://leetcode.com/problems/subsets/description/

猜你喜欢

转载自blog.csdn.net/OzhangsenO/article/details/77995690