首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode - 子集

LeetCode - 子集

作者头像
晓痴
发布2019-07-24 11:53:59
6250
发布2019-07-24 11:53:59
举报
文章被收录于专栏:曌的晓痴曌的晓痴

这题是本文的三周以前做的,也算是一题很常见的题目。

原题地址: https://leetcode-cn.com/problems/subsets/

题目描述

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]

输出:

[

[3],

[1],

[2],

[1,2,3],

[1,3],

[2,3],

[1,2],

[]

]

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/subsets

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

这道题目其实有很多种解决思路,我的思路是这样的:

遍历每个元素,然后再遍历当前所有的子集,为每个子集都添加上当前元素即可。

假设输入为[1,2,3]。那么第一次遍历,元素为1,当前子集为一个空列表,那么在此基础上为空集合新增元素1,当前子集就变成了[]和[1]。

第二次遍历元素[2],再在此基础上为每个子集都添加元素2,子集就变成了[],[1],[2],[1,2]。

最后遍历元素[3],子集最终成为[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]。

中文官网题解:

https://leetcode-cn.com/problems/subsets/solution/

个人题解:

 public List<List<Integer>> subsets(int[] nums) {
     List<List<Integer>> list = new LinkedList<>();
     list.add(Collections.emptyList());
     if (nums.length == 0) {
         return list;
     }
     for (int i : nums) {
         List<List<Integer>> tList = new LinkedList<>();
         for (List<Integer> l : list) {
             List<Integer> tmp = new ArrayList<>(l);
             tmp.add(i);
             tList.add(tmp);
         }
         list.addAll(tList);
     }
     return list;
 }

结果:

这题依然是一个正常水平的发挥,差不多一半的水平,依然保持稳定的效率....

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 曌的晓痴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档