LeetCode 78. 子集] | 刷题打卡

90 阅读1分钟

一、题目描述:

leetcode-cn.com/problems/su…

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

****示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

二、思路分析:

  • dfs回溯
  • 两种思路
    • 1.逐个考察数字,每个数都选或不选
    • 2.枚举当前只选一个数有哪几种情况,选两个数有几种情况
  • 两种思路都是先画出树,只是画树的方式不同

三、AC 代码:

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function(nums) {
    const res = []
    const subset = []

    const dfs = (index,subset)=>{
        if(index === nums.length){
            res.push(subset)
            return
        }
        dfs(index+1,subset.slice())
        subset.push(nums[index])
        dfs(index+1,subset.slice())
    }
    dfs(0,[])
    return res
};
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function(nums) {
    const res = []
    const subset = []

    const dfs = (index)=>{
        res.push(subset.slice())
        for(let i=index;i<nums.length;i++){
            subset.push(nums[i])
            dfs(i+1)
            subset.pop()

        }
    }
    dfs(0)
    return res
};

四、总结:

  • 若是下一种状态基于当前状态,则枚举下一种状态,将合适的解记录
  • 画出递归树有助于编码
  • JavaScript的函数参数传递,数组类型是引用传递,要注意。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情