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

题目描述

121、【回溯算法】leetcode ——78. 子集(C++版本)_第1张图片
121、【回溯算法】leetcode ——78. 子集(C++版本)_第2张图片
原题链接: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. 子集

你可能感兴趣的:(数据结构与算法刷题,#,回溯算法,算法,leetcode,c++)