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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章