Skip to content

Latest commit

 

History

History
45 lines (36 loc) · 1.15 KB

Subsets.md

File metadata and controls

45 lines (36 loc) · 1.15 KB

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]] => [[][1][]] => [[][1][2]] => [[][1][2][1]] => [[][1][2][1, 2]] .... 看明白了吗?这里实际上可以先插入前面的元素,然后再补上当前循环到的元素则可以了,这里最主要的技巧就是这个了。

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> res(1);
        sort(nums.begin(), nums.end());
        for (int i = 0; i < nums.size(); i++) {
            int size = res.size();
            for (int j = 0; j < size; j++) {
                res.push_back(res[j]);
                res.back().push_back(nums[i]);
            }
        }

        return res;
    }
};

相似题目[Subsets II](./Subsets II.md)