【leetcode hot 100 78】子集

解法一:回溯法

java 复制代码
class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        List<Integer> temp = new ArrayList<Integer>();
        backtrace(0, nums, result, temp);
        return result;
    }

    public void backtrace(int i, int[] nums, List result, List temp){
        result.add(new ArrayList<Integer>(temp)); // 加入元素个数为i的子集 这里类型强转要用new

        for(int j=i; j<nums.length; j++){
            // j=i表示j之前的元素遍历过了,要遍历j后面的元素
            temp.add(nums[j]);
            backtrace(j+1, nums, result, temp);  
            temp.remove(temp.size()-1);
        }
        // 1 2 3 的输出方式为[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]
    }
}

注意:

  • 这里类型转换要用new:result.add(new ArrayList<Integer>(temp)),而不是强转ArrayList<Integer>(temp)
相关推荐
紫色风铃14 分钟前
图解版LIS,一篇文章教会你什么是最长递增子序列
前端·算法·面试
BingLin-Liu27 分钟前
蓝桥杯备考:二分答案之路标设置
算法·职场和发展·蓝桥杯
爱干饭的boy1 小时前
Leetcode—454. 四数相加 II(STL的map AND 基础算法)
开发语言·数据结构·c++·算法·leetcode
一只_程序媛1 小时前
【leetcode hot 100 79】单词搜索
算法
我欲混吃与等死2 小时前
LeetCode 21Merge Two Sorted Lists 合并两个排序链表 Java
java·leetcode·链表
Elizahone2 小时前
【经典题目】逆序对的数量 离散化技巧
算法·树状数组·归并分治·离散化技巧
滨HI02 小时前
蓝桥杯2024B组
职场和发展·蓝桥杯
平乐君2 小时前
Leetcode刷题笔记1 图论part03
笔记·leetcode·图论
夜松云2 小时前
线性代数核心概念与NumPy科学计算实战全解析
数据结构·人工智能·python·线性代数·算法·机器学习·numpy
空白木各2 小时前
2Dslam前端分类
人工智能·算法·分类