zoukankan      html  css  js  c++  java
  • 78. Subsets (Back-Track, DP)

    Given a set of distinct integers, nums, return all possible subsets.

    Note:

    • Elements in a subset must be in non-descending order.
    • 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],
      []
    ]

    思路:遍历数组,有选择当前元素和不选当前元素两种操作,所以使用带回溯的递归

    class Solution {
    public:
        vector<vector<int>> subsets(vector<int> &S) {
            vector<vector<int>> result;
            vector<int> pre;
            result.push_back(pre);
            if(S.size()==0)
                return result;
            sort(S.begin(),S.end());
            DepthFirst(S,result,pre,0);
            return result;
        }
        void DepthFirst(vector<int> &S , vector<vector<int>> &result ,vector<int> &pre , int depth)
        {
            if (depth==S.size()) {
                return;
            }
            pre.push_back(S[depth]);
            result.push_back(pre);
            DepthFirst(S,result,pre,depth+1);
            pre.pop_back();
            DepthFirst(S,result,pre,depth+1);
        }
    };

    思路II: DP. n个元素的数组结果,是n-1个数组结果,再加上插入第n个元素的结果

    class Solution {
    public:
        vector<vector<int>> subsets(vector<int>& nums) {
            vector<vector<int>> ret;
            vector<int> retItem;
            ret.push_back(retItem);
            int size; //number of memebers in ret
            for(int i = 0; i < nums.size(); i++){ //iterate the number to insert
                size = ret.size();
                for(int j = 0; j < size; j++){ //iterate current item in ret
                    vector<int> newItem = ret[j];
                    newItem.push_back(nums[i]);
                    ret.push_back(newItem);
                }
            }
            return ret;
        }
    };
  • 相关阅读:
    命令返回值
    PowerShell脚本传递参数
    HTTP 错误 404.3
    xcopy拷贝判断是否成功 robocopy排除子目录
    WinRAR压缩
    批处理命令随笔
    Android Studio3.0中dependencies依赖由compile变为implementation的区别
    compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
    Android Studio工程Gradle编译报错
    rsync应用实例
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4855299.html
Copyright © 2011-2022 走看看