每日一题之幂集

2020-04-15  本文已影响0人  this_is_for_u

题目:幂集

幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素

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

示例:

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

分析

从题意可以看出是使用回溯思想,由于要求集合中不包含重复的元素,所以可以先把输入集合中重复的元素去掉并且排序,再进行回溯操作,回溯过程中确保始终向后遍历就可以避免出现重复元素。

代码

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        auto it = std::unique(nums.begin(), nums.end());
        nums.resize(std::distance(nums.begin(), it));
        vector<int> path;
        dfs(nums, 0, path);
        return ret;
    }

    vector<vector<int>> ret;
    void dfs(vector<int>& nums, int index, vector<int>& path) {
        ret.push_back(path);
        if (index == nums.size()) {
            return;
        }
        for (int i = index, size = nums.size(); i < size; ++i) {
            path.push_back(nums.at(i));
            dfs(nums, i+1, path);
            path.pop_back();
        }
    }
};
上一篇 下一篇

猜你喜欢

热点阅读