leetCode 78.Subsets (子集) 解题思路和方法
2023-09-11 14:20:46 时间
Given a set of distinct integers, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
,
a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
思路:这题和上题的组合差点儿相同。仅仅是k的数字是变动的。从0-n。
所以对照上一题,也就是对K加个循环。
代码例如以下:
public class Solution { boolean[] f; List<List<Integer>> list; public List<List<Integer>> subsets(int[] nums) { list = new ArrayList<List<Integer>>(); if(nums.length == 0){//必须是有效k值 return list; } f = new boolean[nums.length]; for(int i = 0; i <= nums.length;i++){ count(nums,"",i,0);//调用函数 } return list; } /** * 实现对k个数字的排练组合 * @param a 数组 * @param s 排练组合得到的结果 * @param nn 排练组合的数字个数 */ private void count(int[] a,String s,int nn,int j){ if(nn == 0){//处理结果 String[] sa = s.split(",");//切割数组 List<Integer> al = new ArrayList<Integer>(); for(int i = 0;i < sa.length; i++){ if(sa[i].length() > 0)//仅仅有当不为空的时候才加入 al.add(Integer.parseInt(sa[i]));//加入 } Collections.sort(al);//排序,非降序 list.add(al); return; } //遍历,从i=j開始。仅仅要i开头的与i大的值 for(int i = j; i < a.length; i++){ if(!f[i]){ f[i] = true; count(a,s + "," + a[i],nn-1,i+1);//调用下一个为false的数字 f[i] = false; } } } }
相关文章
- Java实现 LeetCode 777 在LR字符串中交换相邻字符(分析题)
- Java实现 LeetCode 678 有效的括号字符串(暴力+思路转换)
- Java实现 LeetCode 410 分割数组的最大值
- LeetCode-953. 验证外星语词典【map】
- Python 刷Leetcode题库,顺带学英语单词(25)
- Leetcode 1296. 划分数组为连续数字的集合(提供一种思路)
- leetcode 141. 环形链表 js 实现
- leetCode 57.Insert Interval (插入区间) 解题思路和方法
- leetCode 60.Permutation Sequence (排列序列) 解题思路和方法
- LeetCode回溯算法的解题思路
- LeetCode动态规划的解题思路
- LeetCode解题思路
- leetcode 476. Number Complement
- LeetCode 423. Reconstruct Original Digits from English——学会观察,贪心思路
- 【Leetcode刷题Python】LeetCode 478. 在圆内随机生成点
- 【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
- 【LeetCode】300.最长上升子序列