【JS每日一算法】🟨72.子集(递归回溯)

524 阅读1分钟

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

示例:

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

题解:

更多JS版本题解点击链接关注该仓库👀

/**
 * @description: 递归回溯   TC:O(2^n)  SC:O(n^2)
 * @author: JunLiangWang
 * @param {*} nums  给定数组
 * @return {*}
 */
function recursionBackTracking(nums){
    /**
     * 该方案使用递归回溯枚举所有组合
     */

    // 输出数组
    let outArray=[];
    /**
     * @description: 递归
     * @author: JunLiangWang
     * @param {*} index     当前索引
     * @param {*} selectNum 当前组合
     * @return {*}
     */    
    function recursion(index,selectNum){
        // 向输出数组添加当前组合
        outArray.push(selectNum);
        // 从当前索引遍历继续递归,直到超出nums长度
        for(let i=index;i<nums.length;i++){
            recursion(i+1,[...selectNum,nums[i]]);
        }
    }
    // 执行递归
    recursion(0,[]);
    // 返回结果
    return outArray;
} 

来源:力扣(LeetCode)