博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
subsets I && II leetcode
阅读量:7043 次
发布时间:2019-06-28

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

Subsets

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],  []]

回溯法

说明

一道经典的回溯问题, 要注意的是在leetcode中如果想AC的话数组必须先排序才可以.

复杂度

因为长度为n的数组的子集个数为2^n

时间O(2^n) 空间O(2^n)

代码

public List
> subsets(int[] nums) { List
> res = new ArrayList
>(); if (nums == null || nums.length == 0) { return res; } List
tem = new ArrayList
(); Arrays.sort(nums); helper(res, tem, nums,0); return res;}public void helper(List
> res, List
tem, int[] nums, int index) { res.add(new ArrayList
(tem));//防止引用修改所以要new 一个list if (index >= nums.length) { return; } for (int i = index; i < nums.length; i++) { tem.add(nums[i]); helper(res, tem, nums, i + 1); tem.remove(tem.size() - 1); }}

Subsets II

Given a collection of integers that might contain duplicates, 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,2], a solution is:[  [2],  [1],  [1,2,2],  [2,2],  [1,2],  []]

回溯法

说明

与i不同的是有重复的数字, 例如[1,2(1)] [1,2(2)]情况相同, 递归过程中每次新选取的可以是和递归数组相同的,(比如nums是[1,2,2,2] 当前递归栈是[1,2(1)] 新加入的[1,2(1), 2(2)]是合法的) 但是后面的元素就不能相同了([1, 2(1), 2(3)]就不合法 因为重复了)。

新选取的元素在递归栈里就是每次当i取index得值时候, 所以当i!=index的值时候来去重

复杂度

时间O(2^n) 空间O(2^n)

代码

public List
> subsetsWithDup(int[] nums) { List
> res = new ArrayList
>(); if (nums == null || nums.length == 0) { return res; } List
tem = new ArrayList
(); Arrays.sort(nums); helper(res, tem, nums,0); return res;}public void helper(List
> res, List
tem, int[] nums, int index) { res.add(new ArrayList
(tem)); if (index >= nums.length) { return; } for (int i = index; i < nums.length; i++) { //去重复: if (i != index && nums[i] == nums[i - 1]) { continue; } tem.add(nums[i]); helper(res, tem, nums, i + 1); tem.remove(tem.size() - 1); } }

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

你可能感兴趣的文章
Java线程之Callable和Future
查看>>
多线程的实现及常用方法_DAY23
查看>>
在访问RESTful接口时出现:Could not write content: No serializer found for class的问题解决小技巧收集...
查看>>
linux下vim命令详解
查看>>
[AngularFire] Firebase OAuth Login With Custom Firestore User Data
查看>>
c++11 nullptr
查看>>
SpringMVC系列(二): SpringMVC各个注解的使用
查看>>
vs2010如何安装qt插件
查看>>
如何开始做一个架构设计 语音预览 - 小薇
查看>>
Centos7 安装redis服务
查看>>
SQL Server-聚焦ROW_NUMBER VS TOP N性能
查看>>
微信小程序 常见问题 小结
查看>>
少用数字来作为参数标识含义
查看>>
不错位的java .class 反编译工具推荐
查看>>
SQLServer 数据库镜像+复制切换方案
查看>>
平安科技移动开发二队技术周报(第十五期)
查看>>
build.gradle & gradle.properties
查看>>
windows server2008服务器下XAMPP集成环境配置apache的SSL证书:
查看>>
JS中同步与异步的理解
查看>>
Django Rest Framework(分页、视图、路由、渲染器)
查看>>