美文网首页
每日一题之幂集

每日一题之幂集

作者: this_is_for_u | 来源:发表于2020-04-15 21:00 被阅读0次

    题目:幂集

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

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

    示例:

    输入: 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();
            }
        }
    };
    

    相关文章

      网友评论

          本文标题:每日一题之幂集

          本文链接:https://www.haomeiwen.com/subject/ccnhvhtx.html