zoukankan      html  css  js  c++  java
  • Leetcode题目78.子集(回溯-中等)

    题目描述:

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

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

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

    题目解析:回溯的过程是执行一次深度优先遍历,一条路走到底,走不通的时候,返回回来,继续执行,一直这样下去,直到回到起点。

    代码实现:注意空集也是集合的子集

    将结果集扩大操作放在循环里面

     public static List<List<Integer>> subsets(int[] nums) {
    
            List<List<Integer>> res = new ArrayList<>();
            return backTrace(0, nums, res, new ArrayList<>());
        }
    
        private static List<List<Integer>> backTrace(int i, int[] nums, List<List<Integer>> res, ArrayList<Integer> tmp) {
    
            if (tmp.size() == 0) {
                res.add(new ArrayList<>(tmp));
            }
            for (int j = i; j < nums.length; j++) {
                tmp.add(nums[j]);
                res.add(new ArrayList<>(tmp));
                backTrace(j + 1, nums, res, tmp);
                //递归结束,恢复状态
                tmp.remove(tmp.size() - 1);
            }
            return res;
        }

    将结果集新增放在循环外面

      class Solution {
            public static List<List<Integer>> subsets(int[] nums) {
            List<List<Integer>> res = new ArrayList<>();
            backtrack(0, nums, res, new ArrayList<>());
            return res;
    
        }
    
        private static void backtrack(int i, int[] nums, List<List<Integer>> res, ArrayList<Integer> tmp) {
            res.add(new ArrayList<>(tmp));
            for (int j = i; j < nums.length; j++) {
                tmp.add(nums[j]);
                backtrack(j + 1, nums, res, tmp);
                tmp.remove(tmp.size() - 1);
            }
        }
    }
  • 相关阅读:
    data-icon=""图片还可以是自定义的?
    orientationchange不管用啊
    menu({postion:{my:"left top"},at:"right bottom"})里的my与at会冲突吗
    关于position的疑惑
    Linux
    C++
    MATLAB
    SCE
    SFLA混合蛙跳算法
    memetic algorithm
  • 原文地址:https://www.cnblogs.com/ysw-go/p/11815058.html
Copyright © 2011-2022 走看看