zoukankan      html  css  js  c++  java
  • 78. 子集

    1. 题目

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

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

    2. 示例

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

    3. 思路

    这题属于标准的回溯问题(排列问题(组合,全排),基本上就可以用回溯来解决)。

    回溯就四步:

    1. 确定边界;本题的边界就是当前数组的size与元数组的size一致时就结束,即取到所有元素了。

    2. 记录临时数组;当满足条件时,就存储当前数组。本题满足条件是回溯到了最后一个元素,就将临时数组存入到结果数组里面。

    3. 取当前元素;将当前元素存入临时数组,然后回溯,一定要记住,回溯之前如果取了元素就要移除去的元素。

    4. 不取当前元素;直接回溯;

    4. Code

     1 public class SubsetsA {
     2     public List<List<Integer>> subsets(int[] nums) {
     3         List<List<Integer>> ans = new ArrayList<>();
     4         List<Integer> temp = new ArrayList<>();
     5         perm(nums, ans, temp, 0);
     6         return ans;
     7     }
     8 
     9     public void perm(int[] nums, List<List<Integer>> ans, List<Integer> temp, int n) {
    10         if (n == nums.length) {
    11             ans.add(new ArrayList<>(temp));
    12             return;
    13         }
    14         if(temp.size() == nums.length) {
    15             return;
    16         }
    17         // 取当前元素
    18         temp.add(nums[n]);
    19         perm(nums, ans, temp, n + 1);
    20         temp.remove(temp.size() - 1); // 递归结束后移除添加进的元素
    21 
    22         // 不取当前元素
    23         perm(nums, ans, temp, n + 1);
    24     }
    25 
    26     public static void main(String[] args) {
    27         int[] nums = {1, 2, 3};
    28         System.out.println(new SubsetsA().subsets(nums));
    29     }
    30 }
  • 相关阅读:
    Python Day 29 socket、scoket套接字分类、基于TCP的socket、常见错误
    Python Day 28 网络编程、OSI七层模型、三次握手和四次挥手
    Python Day 27 元类、__inti__方法、__new__方法、__call__方法、单例模式、exec与eval区别、异常处理语法
    get,post区别
    Restful API
    tcp 3次握手四次挥手
    mongodb数据库常用操作的整理
    python装饰器
    python中的*args和** kwargs区别
    Vue插件
  • 原文地址:https://www.cnblogs.com/haifwu/p/14805974.html
Copyright © 2011-2022 走看看