zl程序教程

您现在的位置是:首页 >  后端

当前栏目

121、【回溯算法】leetcode ——78. 子集(C++版本)

C++LeetCode算法 版本 回溯 子集 78 121
2023-09-11 14:20:01 时间

题目描述

在这里插入图片描述
在这里插入图片描述
原题链接:78. 子集

解题思路

本题是子集问题,若把遍历过程看作一棵树,子集问题实际上就是获取数中的所有结点,而组合问题分割问题仅获取树中的叶子结点

子集问题获取每个结点方式,是在每层向下遍历前存取结点。

class Solution {
public:
    vector<int> path;
    vector<vector<int>> res;    
    void backtracking(vector<int>& nums, int startIndex) {                
        res.push_back(path);            // 为了正常存取叶子结点,需要把它放到if前面
        if(startIndex == nums.size())           return ;
        for(int i = startIndex; i < nums.size(); i++) {            
            path.push_back(nums[i]);
            backtracking(nums, i + 1);
            path.pop_back();
        }
    }
    vector<vector<int>> subsets(vector<int>& nums) {     
        backtracking(nums, 0);
        return res;
    }
};

参考文章:78. 子集