78. Subsets

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: nums = [1,2,3]
Output:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

思路

一位一位叠加

例如:[1,2,3]

  • 最开始是空集
  • 接着处理元素1:在空集上加1,为[1]。现在有两个子集[]和[1]
  • 接着处理元素2:为每个每个子集都加上元素2,得到[2],[1, 2]。现在子集为[], [1], [2], [1, 2]
  • 同理处理元素3:得到[3], [1, 3], [2, 3], [1, 2, 3]。再加上之前的子集就是所有的子集合

c++11

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> res(1); //初始化一个空vector  []
        for (decltype(nums.size()) i = 0; i < nums.size(); ++i) {
            const auto size = res.size();
            for (auto j = 0; j < size; ++j) {
                res.emplace_back(res[j]);
                res.back().emplace_back(nums[i]);
            }
        }
        return res;
    }
};

results matching ""

    No results matching ""