代码随想录二刷 Day 30

78.子集

与组合问题不同的就是要收集所有的子节点,而不仅仅的叶子节点;唯一一行代码的区别就是要把result的收集过程放到递归程序的最开始那里

cpp 复制代码
class Solution {
public:

    vector<vector<int>> result;
    vector<int> path;

    void traversal(vector<int>& nums, int start_index) {
        result.push_back(path); // 收集子集,要放在终止添加的上面,否则会漏掉自己; 这句是唯一和组合题目不一样的一句,放的位置不同就可以收集所有的节点
        if (start_index == nums.size()) return;

        for( int i = start_index; i <nums.size(); i++) {
            path.push_back(nums[i]);
            traversal(nums, i+1);
            path.pop_back();
        }
    }

    vector<vector<int>> subsets(vector<int>& nums) {
        traversal(nums, 0);
        return result;
    }
};

90.子集II

这个题和上一个题区别就是要加上树层的去重,整体还是挺好做的,有些细节还是不会写

cpp 复制代码
class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;

    void traversal(vector<int>& nums, int start_index, vector<bool>& used) {
        result.push_back(path);
        if (start_index == nums.size()) { 
            return;
        }

        for( int i = start_index; i <nums.size(); i++) {
            //if( nums[i] == nums[i-1] && used[i-1] == false){这句不行i>0会报奇怪的错
            if(i>0 && nums[i] == nums[i-1] && used[i-1] == false){
                //return;//这句写错了,这里应该是跳出这个循环而不是return;
                continue;
            }
            path.push_back(nums[i]);
            used[i] = true;
            traversal(nums, i+1, used);
            path.pop_back();
            used[i] = false;
        }
    }

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<bool> used(nums.size(), false); //这句自己还是写不出
        sort(nums.begin(),nums.end());
        traversal(nums, 0, used);
        return result;
    }
};
相关推荐
浅念-25 分钟前
刷穿LeetCode:BFS 解决 Flood Fill 算法
数据结构·c++·算法·leetcode·职场和发展·bfs·宽度优先
做cv的小昊1 小时前
【TJU】研究生应用统计学课程笔记(8)——第四章 线性模型(4.1 一元线性回归分析)
笔记·线性代数·算法·数学建模·回归·线性回归·概率论
贾斯汀玛尔斯2 小时前
每天学一个算法--倒排索引(Inverted Index)
算法·inverted-index
小e说说2 小时前
打破偏科困境:这些学习软件助孩子重燃学习热情
算法
我命由我123452 小时前
程序员的心理学学习笔记 - 空杯心态
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
月昤昽2 小时前
autoCAD二次开发 4.正多边形与collection区分
算法·c#·二次开发·autocad二次开发
休息一下接着来3 小时前
C++ 固定容量环形队列实现
c++·算法
im_AMBER3 小时前
手撕hot100之矩阵!看完这篇就AC~
javascript·数据结构·线性代数·算法·leetcode·矩阵
笨笨饿3 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发
风萧萧19994 小时前
问答样例如何在RAG问答中使用?
算法