• LeetCode_Subsets II


    Given a collection of integers that might contain duplicates, S, 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 S = [1,2,2], a solution is:
    

      

    [
      [2],
      [1],
      [1,2,2],
      [2,2],
      [1,2],
      []
    ]

    DFS :

    class Solution {
    public:
        void  DFS(vector<int> &S, vector<int> &temp,int n, int size,int start)
        {
        
            if(n == size)
            {
                result.push_back(temp);
                return ;
            }
            if(n > size)
                return ;
            
            for(int i = start; i< len ;i++)
            {
                if(i != start && S[i] == S[i-1]) 
                      continue ;
                if(flag[i] == false)
                {
                    flag[i] = true;
                    temp.push_back(S[i]);
                    DFS(S, temp, n+1, size,i+1);
                    temp.pop_back();
                    flag[i] = false;
                }
            }
        
        }
        vector<vector<int> > subsetsWithDup(vector<int> &S) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            result.clear();
            len = S.size();
            flag.resize(len,false);
            vector<int> temp;
            result.push_back(temp) ;
            sort(S.begin(), S.end());
            
            for(int i = 1; i <= len ; i++)
                 DFS(S, temp,0, i,0);
                 
            return result;
        }
    private:
        vector<vector<int> > result ;
        vector<bool> flag;
        int len;
    };

     解释下这句:”if(i != start && S[i] == S[i-1]) continue ; 这句话保证每个循环进入的元素不会有重复。start : 保证所有的元素进入的顺序为从左往右~

    重写后的代码:

    class Solution {
    public:
    void DFS(vector<int> &S, vector<int> &ans, int size, int currentPos)
        {
        
            if(ans.size() == size ){
                res.push_back(ans);
                return;
            }
            
            for(int i = currentPos; i< S.size(); ++i)
            {
                if(i != currentPos && S[i] == S[i-1]) continue;    
                ans.push_back(S[i]);
                DFS(S, ans, size, i+1);
                ans.pop_back();
            }
        }
        vector<vector<int> > subsetsWithDup(vector<int> &S) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            res.clear();
            sort(S.begin(), S.end());
            vector<int> emp;
            res.push_back(emp);
            
            for(int i = 1; i <= S.size(); ++i)
            {
                vector<int> ans;
                DFS(S, ans, i, 0);
            }
            
            return res;
        }
    private:
        vector<vector<int>> res;
    };
  • 相关阅读:
    NFS原理
    linux NFS配置案例
    centos swap分区
    git常用命令
    MHA介绍和基础、原理、架构、工具介绍
    mysql5.7.26部署MHA
    mysql5.7.26 基于GTID的主从复制环境搭建
    MHA监控进程异常退出(MHA版本:0.56)
    mysql 主从 Last_IO_Errno错误代码说明
    mysql 在gtid环境下缺少一部分binlog部署从库
  • 原文地址:https://www.cnblogs.com/graph/p/3216589.html
Copyright © 2020-2023  润新知