leetcode-90-Subsets II

问题

题目:[leetcode-90]

思路

上一目的题目需要两个条件:
1.必须是升序
2.试探过的元素不能反复试探
3. 如果是相同的元素,同一个位置不能由多个相同元素试探。但是要注意,如果相同元素已经试探了别的位置,那么这个位置不可能由相同元素试探。即使元素相同。

代码

class Solution {
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<int> arr;
        vector<vector<int>> ret;
        ret.push_back(arr);
        set<int> visited;

        dfs( arr, visited, nums, nums.size(), ret );
        return ret;
    }
private:
    void dfs(vector<int>& arr, set<int>& visited, vector<int>& nums, int n, vector<vector<int>>& ret ){
        if( arr.size() == n ) return;
        else{
            for(int i = 0; i < n; ++i){
                if( visited.find(i) != visited.end() ) continue;
                int sz = arr.size();
                bool flag = true;
                for( int k = 0; k < sz; ++k ){
                    if( arr[k] > nums[i] ){ flag = false; break; }
                }
                if(!flag) continue;
                flag = true;
                for(int j = 0; j < i; ++j){
                    if(nums[j] == nums[i] && visited.find(j) == visited.end() ){ flag = false; break; }
                }
                if(!flag) continue;

                arr.push_back( nums[i] );
                visited.insert( i );
                ret.push_back(arr);
                dfs( arr, visited, nums, n, ret );
                arr.pop_back();
                visited.erase(i);
            }
        }
    }
};
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值