博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode78. Subsets
阅读量:6238 次
发布时间:2019-06-22

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

题目要求

Given a set of distinct integers, nums, return all possible subsets.Note: 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],  []]

类似的题目有:

leetcode60 Permutation Sequence 可以参考
leetcode77 Combinations 可以参考

思路一:递归

还是利用递归的方式,在前一种情况的基础上遍历下一轮的组合情况。

public List
> subsets(int[] nums) { List
> result = new ArrayList
>(); result.add(new ArrayList
()); subsets(result, nums, 0, new ArrayList
()); return result; } public void subsets(List
> result, int[] nums, int startIndex, List
currentList){ if(startIndex == nums.length){ return; } while(startIndex
(currentList)); subsets(result, nums, startIndex, currentList); currentList.remove(currentList.size()-1); } }

思路2:排序后循环

起始subset集为:[]

添加S0后为:[], [S0]
添加S1后为:[], [S0], [S1], [S0, S1]
添加S2后为:[], [S0], [S1], [S0, S1], [S2], [S0, S2], [S1, S2], [S0, S1, S2]

public List
> subsets(int[] S) { List
> res = new ArrayList<>(); res.add(new ArrayList
()); for(int i : S) { List
> tmp = new ArrayList<>(); for(List
sub : res) { List
a = new ArrayList<>(sub); a.add(i); tmp.add(a); } res.addAll(tmp); } return res;}

clipboard.png

想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

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

你可能感兴趣的文章
机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
查看>>
实用算法实现-第 14 篇 启发式搜索
查看>>
c#常用的排序算法
查看>>
论文阅读——Visual inertial odometry using coupled nonlinear optimization
查看>>
Office插件编程[转]
查看>>
读代码还是读文档,来自知乎
查看>>
Linux 常见编译错误
查看>>
ASP.NET MVC 3 Controller
查看>>
Vs中调试MVC源代码步骤
查看>>
JavaScript项目重构到底有多少坑要填要踩
查看>>
footer绝对定位但是不在页面最下边解决方案
查看>>
Oil Deposits(油田)(DFS)
查看>>
Android 画图(自定义坐标轴控件的拖动实现)
查看>>
在Linux下配置git并设置远程仓库
查看>>
[解题报告]499 - What's The Frequency, Kenneth?
查看>>
Vue入门---常用指令详解
查看>>
iOS 越狱后 SSH 不能连接
查看>>
soj 3291 Distribute The Apples II DP
查看>>
苹果App Store审核指南中文翻译(更新至140227)
查看>>
转 -- OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
查看>>