zoukankan      html  css  js  c++  java
  • LeetCode一刷:回溯算法-子集

    问题描述:

    子集
    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

    说明:解集不能包含重复的子集。

    示例:

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

    作者:力扣 (LeetCode)
    链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xv67o6/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    分析:

    画个草图:

    解法:

    var backtrack = function(list, tmpList, nums, start) {
        const len = nums.length;
        if(start === len) {
            return;
        }
        for(let i=start; i<len; i++) {
            tmpList.push(nums[i]);
            list.push([...tmpList]);
            for(let j=i+1;j<len;j++) {
              tmpList.push(nums[j]);
              list.push([...tmpList]);
              backtrack(list, tmpList, nums, j+1);
              tmpList.pop();
            }
            tmpList.pop();
        }
    };
    
    
    /**
     * @param {number[]} nums
     * @return {number[][]}
     */
    var subsets = function(nums) {
        var len = nums.length;
        if(len === 0) return [[]];
        var list = [[]];
        backtrack(list, [], nums, 0);
        return list;
    };

     改进版:

    var backtrack = function(list, tmpList, nums) {
        const len = nums.length;
        if(0 === len) {
            return;
        }
        for(let i=0; i<len; i++) {
            tmpList.push(nums[i]);
            list.push([...tmpList]);
            backtrack(list, tmpList, nums.slice(i+1));
            tmpList.pop();
        }
    };
    
    
    /**
     * @param {number[]} nums
     * @return {number[][]}
     */
    var subsets = function(nums) {
        var len = nums.length;
        if(len === 0) return [[]];
        var list = [[]];
        backtrack(list, [], nums);
        return list;
    };

     

  • 相关阅读:
    android studio中timber的配置
    bufferknife框架的正确使用方式 -终于他么知道了
    开源的图像滤镜库----for Android
    HSV做通道分离是出现的Vector内存越界错误
    HSV与RGB的相互转换的公式
    Windows下python的第三方库的安装
    Python出现"Non-ASCII character 'xe6' in file"错误解决方法
    Verilog的IDE Quartus II
    Java-ZipUtil工具类
    Java-JDBCUtil工具类
  • 原文地址:https://www.cnblogs.com/davidxu/p/13658701.html
Copyright © 2011-2022 走看看