Leetcode刷题笔记题解(C++):78. 子集

Leetcode刷题笔记题解(C++):78. 子集_第1张图片

思路1:深度优先遍历,找到递归规律,进行递归,选择每个元素,分为2种情况,当前元素选择或者不选择

递归树可以自己画一下,具体代码如下:

class Solution {
public:
    // 深度优先遍历处理
    vector> subsets1(vector& nums) {
        vector> res;
        if(nums.empty()) return res;
        vector temp;
        dfs(res,nums,temp,0);
        return res;
    }
    void dfs(vector>& ans,vector &nums,vector &temp,int index){
        if(index==nums.size()){
            ans.push_back(temp);
            //temp.clear();
            return;
        }
        //选择当前元素
        temp.push_back(nums[index]);
        dfs(ans,nums,temp,index+1);

        //不选择当前元素
        temp.pop_back();
        dfs(ans,nums,temp,index+1);
    }   
};

思路2:层序遍历,每次加入一个元素就扩充res的长度,直到所有元素添加完毕。

Leetcode刷题笔记题解(C++):78. 子集_第2张图片

代码如下:

class Solution {
public:
    //层序遍历
    vector> subsets(vector& nums) {
        vector > res(1);
        for(int i=0;i tmp=res[j];
                tmp.push_back(nums[i]);
                res.push_back(tmp);
            }
        }
        return res;
    }
};

 

 

你可能感兴趣的:(Leetcode算法题解,c++,算法,leetcode,回溯)