博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetCode 78.Subsets (子集) 解题思路和方法
阅读量:6411 次
发布时间:2019-06-23

本文共 1227 字,大约阅读时间需要 4 分钟。

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; public List
> subsets(int[] nums) { list = new ArrayList
>(); 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
al = new ArrayList
(); 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; } } }}

转载地址:http://jgzra.baihongyu.com/

你可能感兴趣的文章
python IO编程-序列化
查看>>
redis的分布式解决方式--codis (转)
查看>>
全自动Web后门扫描(转)
查看>>
html&javaScript&ajax部分
查看>>
[Go] golang缓冲通道实现资源池
查看>>
coursera machine learning note
查看>>
Spring框架及IOC容器
查看>>
Unity3D动画面板编辑器状态属性对照表
查看>>
iOS开发--面试
查看>>
小数位 处理函数
查看>>
mybatis中一对多关系实现中的错误
查看>>
js如何获取字符串第几次出现的位置
查看>>
OWin
查看>>
尝尝C#的语法糖(自动属性/匿名方法/Lamda表达式等)-小心蛀牙!
查看>>
数组去重,面试必考题
查看>>
static全局变量与普通的全局变量的区别
查看>>
Android TextView 文字居中
查看>>
79. could not initialize proxy - no Session 【从零开始学Spring Boot】
查看>>
Android Material Design Ripple Effect在Android5.0(SDK=21)以下Android版本崩溃问题解决
查看>>
C/C++ -- 编程中的内存屏障(Memory Barriers) (2)
查看>>