Java 求解子集
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解子集相关的知识,希望对你有一定的参考价值。
一、题目
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
二、题解
题目要求解集不能包含重复的子集,所以,取过的元素不能重复选取,所以需要设置 index
回溯三部曲
(1)递归函数参数:
全局变量 lists,存放所有的结果
全局变量 list,存放每一次的结果
(2)递归终止条件:
当记录遍历顺序的 index,大于数组长度时,就是集合为空
(3)单层搜索逻辑:
求取子集问题,不需要任何剪枝!因为子集就是要遍历整棵树
三、代码
class Solution
// 全局变量存储所有的结果
List<List<Integer>> lists = new ArrayList<>();
// 存放每一次的结果
Deque<Integer> deque = new LinkedList<>();
public List<List<Integer>> subsets(int[] nums)
// 回溯遍历
backTracking(nums, 0);
return lists;
public void backTracking(int[] nums, int index)
// 加入每一次的结果
lists.add(new ArrayList(deque));
// 递归终止
if (index >= nums.length)
return;
for (int i = index; i < nums.length; i++)
deque.addLast(nums[i]);
backTracking(nums, i + 1);
deque.removeLast();
四、总结
本地终止条件不写也可以,当 index 大于nums.length 时,for 循环遍历也不满足,会直接结束
以上是关于Java 求解子集的主要内容,如果未能解决你的问题,请参考以下文章