leetCode 78.Subsets (子集) 解题思路和方法
2015-07-22 13:18
260 查看
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 =
a solution is:
思路:这题和上题的组合差不多,只是k的数字是变动的,从0-n。所以对比上一题,也就是对K加个循环。
代码如下:
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; } } } }
相关文章推荐
- 为Symfony2和Redis正名,基于PHP的10亿请求/周网站打造
- 孤立点挖掘算法
- 正则表达式删除注释及空白行
- 深入分析Sleep(0)与Sleep(1)的区别
- hdu 5296,15年多校1-7
- HDU 1969 Pie
- 数据结构算法代码
- leetCode 77.Combinations (组合)
- Tomcat详细安装配置
- asp利用winrar解压缩文件
- Git学习笔记(一)
- Block
- 在人机交互实验中遇到的一些问题
- MVC-Service、IService
- Windows 7安装软件时无法将注册值写入注册表的处理方法
- RAID选项
- Ferry Loading IV(队列)
- C语言编程基础-16动态内存分配 二级指针做形参 函数指针
- PEM (Privacy Enhanced Mail) Encoding
- java基础第九天