【lintcode17/18】Subset, SubsetII
题目:给定一个含不同整数的集合,返回其所有的子集。
样例:如果 S = [1,2,3],有如下的解:[[3],[1],[2],[1,2,3],[1,3],[1,2],[2,3],[]]
思路:因为此题求所有子集,自然想到用深度优先搜索的方法。如下树,根节点为空集,从根结点开始进行深度搜索。首先寻找到[1],再找以[1]开头所有元素,向下找到[1,2],再找以[1,2]开头的所有元素集合,从而找到[1,2,3]。此时已无法搜索更深层,变向上回溯。回溯到[1]结点,搜索到[1,3]。再向上回溯,直到搜索完整棵树为止。

public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (nums.length == 0){
result.add(new ArrayList<Integer>());
return result;
}
if(nums == null){
return result;
}
Arrays.sort(nums);
helper(new ArrayList<Integer>(), nums, 0, result);
return result;
}
private void helper(ArrayList<Integer> subset, int[] nums, int startIndex,
List<List<Integer>> result){
result.add(new ArrayList<Integer>(subset));
for(int i = startIndex; i<nums.length; i++){
subset.add(nums[i]);
helper(subset, nums, i+1, result);
subset.remove(subset.size()-1);
}
}
题目:给定一个可能具有重复数字的列表,返回其所有可能的子集。
样例:如果 S = [1,2,2],有如下的解:[[2],[1],[1,2,2],[2,2],[1,2],[]]
思路:此题的输入子集的元素可能有重复值,如果按上一题的思路,以上样例会出现两个[1,2],为了避免第二个[1,2]的出现,在插入前做一个判断。判断当前值是否和上一个值相等(因为数列已是有序的),并且上一个值是否已经被选入,同时下标不溢出,即跳出循环,避免重复。
if(i!=0&&nums[i]==nums[i-1]&&i!=startIndex)
{
continue;
}
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (nums.length == 0){
result.add(new ArrayList<Integer>());
return result;
}
if(nums == null){
return result;
}
Arrays.sort(nums);
helper(new ArrayList<Integer>(), nums, 0, result);
return result;
}
private void helper(ArrayList<Integer> subset, int[] nums, int startIndex,
List<List<Integer>> result){
result.add(new ArrayList<Integer>(subset));
for(int i = startIndex; i<nums.length; i++){
if(i!=0&&nums[i]==nums[i-1]&&i!=startIndex)
{
continue;
}
subset.add(nums[i]);
helper(subset, nums, i+1, result);
subset.remove(subset.size()-1);
}
}
【lintcode17/18】Subset, SubsetII的更多相关文章
- 【设计模式 - 18】之备忘录模式(Memento)
1 模式简介 备忘录模式的定义: 备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象,用作"后悔药",即取消上次操作或返回到以前的某个版本. 备忘录模式的应用实例 ...
- 【33.18%】【hdu 5877】Weak Pair (3种解法)
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submissi ...
- 【Luogu】【关卡1-8】BOSS战-入门综合练习2(2017年10月)【AK】------都是基础题
P1426 小鱼会有危险吗 我个人觉得这个题目出的不好,没说明白,就先只粘贴的AC代码吧 #include <bits/stdc++.h> using namespace std; int ...
- 【LeetCode 18】四数之和
题目链接 [题解] 两重循环枚举[i..j]这个区间 同时规定必取nums[i]和nums[j] 那么现在的问题就变成在下标为[i..j]这个区间的数字里面找两个数字使他们的和为target-nums ...
- 【Python 18】BMR计算器2.0(数值类型转换与while循环)
1.案例描述 基础代谢率(BMR):我们安静状态下(通常为静卧状态)消耗的最低热量,人的其他活动都建立在这个基础上. 计算公式: BMR(男) = (13.7*体重kg)+(5.0*身高cm)-(6. ...
- Python【day 18】面向对象-类和类的关系
一.昨日内容回顾 成员 1.变量 1.成员变量--最常见 1.写法: 变量前面加了self就是成员变量 这里的self表示当前对象 一般是在构造方法中定义 2.调用: 对象.成员变量 3.作用: 可以 ...
- 【Python 1-8】Python手把手教程之——管理列表List
遍历列表 在日常开发中,我们经常需要遍历列表的所有元素,对每个元素执行相同的操作.例如,在管理商场的蔬菜时候,需要给所有的蔬菜商品都打7折,并重新生成价格.当我们需要对列表中的每个元素都执行相同的操作 ...
- 【程序18】求s=a+aa+aaa+aaaa+aa...a的值
求s=a+aa+aaa+aaaa+aa-a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制. 知识点:在Python 3里,reduce( ...
- 【开源】C#.NET股票历史数据采集,【附18年历史数据和源代码】
如果用知乎,可以关注专栏:.NET开源项目和PowerBI社区 重点重点:我没有买股票,没有买股票,股市是个坑,小心割韭菜哦. 本文的初衷是数据分析(分析结果就不说了,就是想看看筛选点数据),只不过搞 ...
随机推荐
- python基础(12)-包的导入&异常处理
包的导入 几种导入方式 import 包名 import time time.time() import 包名,包名 import time,sys time.time() sys.path from ...
- chrome下调试安卓app 之 ionic
打开chrome浏览器,输入chrome://inspect/#devices,将安卓手机插入电脑上,打开手机设置 打开 开发者调试usb调试 ,网页上会出现 input 点击, 就会看见consol ...
- 关于.net里面的静态html页面和接口组合使用的网站
在网站的根目录下,主要有三部分组成.①接口里面的bin文件夹②接口③html里面的页面. html里面有ajax请求接口的js代码.另外接口里面的web.config不需要拷贝到网站根目录去. 如下截 ...
- Python学习之高级数组(一)
1.Python基础学习之高级数组(一) 1.1视图:就是与较大数组共享相同数据的较小数组.Numpy包提供数据视图的概念是为了精确地控制内存的使用方式. 数组视图.切片视图.转置和重塑视图等 数组 ...
- mysql 试题总结
一.MySQL的复制原理以及流程 1.复制基本原理流程 1.主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 2.从:io线程——在使用start sla ...
- pypi上传命令
windows 1.新建一个setup.py文件与你自己写的.py模块放在一个文件夹内 内容: from distutils.core import setup setup( name = " ...
- Axis2的简单配置(完整版)
Axis2的简单配置(终结版) 1.axis2 下载地址 axis2-1.6.2-bin.zip http://mirror.esocc.com/apache//axis/axis2/java/cor ...
- Android项目开发第二天,关于GitHub
一. 今天在网上学习了如何使用GitHub,了解了GitHub是干什么的. 作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户.随着越来越多的应用程序转移到了云上,Github已经 ...
- PHP与JavaScript下的Cookie操作
下面的例子列出几种情形交互场景,列出JS和php交互的方法.总结下,以免日后再为cookie问题困扰. setcookie.php getcookie.php 总结: php用自身函数读取php 的c ...
- php在cli模式下取得命令行中的参数的方法-getopt命令行可传递数组-简单自定义方法取命令行参数
在cli模式下执行PHP时,自动给脚本文件传递了一个变量$argv,其值即是一个命令中所有值组成的数组(以空格区分),在PHP程序中接收参数有3种方法1.直接使用argv变量数组. 2.使用$_SER ...