当前位置:网络安全 > LeetCodd——子集(java)——回溯算法

LeetCodd——子集(java)——回溯算法

  • 发布:2023-09-09 17:38

子集

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

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

示例:

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


思路:这依然是一道排列组合的题目,定义一个标记数组,表示每个元素取不取,具体看代码:

package 中级回溯;import java.util.ArrayList;
import java.util.List;public class 子集 {public List> subsets(int[] nums) {List> list = new ArrayList<>();List single = new ArrayList<>();//标记数组boolean[] a = new boolean[nums.length];digui(list,single,nums,a,0);return list;}public static void digui(List> list,List single,int[] nums,boolean[] a,int n) {if (n == nums.length) {//吧标记了取的元素放进single队列里for (int i = 0; i < a.length; i++) {if (a[i]) {single.add(nums[i]);}}//注意一定要new一个,不然只是复制一个引用list.add(new ArrayList(single));//清空队列single.removeAll(single);return;}else {//取n的情况,准备看下一个a[n] = false;digui(list, single, nums, a, n+1);//不取n的情况,看下一个a[n] =true;digui(list, single, nums, a, n+1);}}
}

相关文章

最新资讯

热门推荐