zoukankan      html  css  js  c++  java
  • 【LeetCode 90】子集 II

    题目链接

    【题解】

    我们在枚举下一个要取哪个数字的时候。 如 1112233 for (int i = start;i<=n;i++) //其中start-1是上一次取的位置。 如果i>start且num[i]==num[i-1]. 那么我们就不应该再取这个num[i]了。 因为肯定在之前已经取过num[i-1]了。此时再取一个num[i]的话。所得到的方案肯定会和 11*****一样了 (其中i==start的话得到的是111****所以可以取)

    【代码】

    class Solution {
    public:
        vector<vector<int>> ans;
    
    void dfs(vector<int> &v,int start,vector<int> &temp){
    	ans.push_back(temp);
    	for (int i = start;i<(int)v.size();i++){
    		if (i>start && v[i]==v[i-1]) continue;
    		temp.push_back(v[i]);
    		dfs(v,i+1,temp);
    		temp.pop_back();
    	}
    }
    
    vector<vector<int>> subsetsWithDup(vector<int> v){
        sort(v.begin(),v.end());
    	ans.clear();
    	vector<int> t;t.clear();
    	dfs(v,0,t);
    	return ans;
    }
    
    };
    
  • 相关阅读:
    Java基础面试题附答案 81-100(五)
    css练习--抽屉作业
    css
    HTML 快速入门
    selectors 模块完成文件上传下载功能
    IO 模型
    进程 线程 协程
    socket套接字
    异常处理
    面向对象
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11954576.html
Copyright © 2011-2022 走看看