Subsets

简介: 给定一个int数组,找出所有的子集;结果要排好序 Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must be in non-descending order.

给定一个int数组,找出所有的子集;结果要排好序

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

Java代码:

 1 package com.rust.datastruct;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.List;
 6 
 7 class SubsetsSolution {
 8     public List<List<Integer>> subsets(int[] nums) {
 9         List<List<Integer>> res = new ArrayList<List<Integer>>();
10         List<Integer> temp = new ArrayList<Integer>();
11         res.add(temp);/* the empty subset: [] */
12         findSubsets(nums, 0, temp, res);
13         return res;
14     }
15     private void findSubsets(int nums[],int start, List<Integer> singleSet,
16             List<List<Integer>> result){
17         if (start >= nums.length){
18             return;
19         }
20         for (int i = start; i < nums.length; i++) {
21             /*keep singleSet*/
22             List<Integer> subset = new ArrayList<Integer>(singleSet);
23             subset.add(nums[i]);
24             Collections.sort(subset);
25             result.add(subset);/*put in result*/
26             findSubsets(nums, i + 1, subset, result);
27         }
28     }
29 }
30 public class Subsets {
31     private static SubsetsSolution solution;
32     private static List<List<Integer>> res;
33     public static void main(String args[]){
34         int nums[] = {1,4,3,2};
35         solution = new SubsetsSolution();
36         res = solution.subsets(nums);
37         for (int i = 0; i < res.size(); i++) {
38             System.out.println(res.get(i));
39         }
40     }
41 }

输出:

[]
[1]
[1, 4]
[1, 3, 4]
[1, 2, 3, 4]
[1, 2, 4]
[1, 3]
[1, 2, 3]
[1, 2]
[4]
[3, 4]
[2, 3, 4]
[2, 4]
[3]
[2, 3]
[2]

递归处理问题。从输出结果可以看出处理的流程。

找到第一个数,这里是“1”,然后“1”保持不动,找下一个数“4”。然后“1”和“4”不动,再接着找。

每个元素都有机会作为开头的数。从左往右遍历一次,每次都会找当前数的右边的可能组合。

目录
相关文章
|
开发框架 自然语言处理 前端开发
【第25期】一文读懂React企业级前端应用框架Umi
【第25期】一文读懂React企业级前端应用框架Umi
715 0
|
7月前
|
人工智能 安全 API
0 代码为你的 Typecho 博客接入阿里云百炼(可接入 DeepSeek-R1 满血版!)
随着科技企业LLM发展成熟,AIHelper插件让Typecho博客轻松拥有AI助手。通过集成阿里云百炼API,支持DeepSeek-R1、Qwen等模型,帮助读者快速查找内容、总结文章。本文详细介绍了从导出文章、配置阿里云百炼、创建AI应用到安装配置插件的全过程,确保安全高效地为博客添加智能交互功能。相比官方方案,AIHelper提供更安全的访问限制和低代码部署方式,无需编写代码即可实现智能化管理。
0 代码为你的 Typecho 博客接入阿里云百炼(可接入 DeepSeek-R1 满血版!)
|
10月前
|
人工智能 自然语言处理 安全
详解:poe ai官网是什么_poe ai官方网站_Poe AI官网入口
在全球范围内,人工智能的迅速发展引发了广泛关注,而Poe AI作为一款前沿的AI聊天平台,正处于这场技术变革的前沿
1060 10
|
11月前
|
机器学习/深度学习 消息中间件 监控
监控工具实现实时监测的方法
监控工具实现实时监测的方法
473 11
|
11月前
|
前端开发 JavaScript
宏任务和微任务在浏览器渲染过程中的执行顺序
宏任务和微任务是浏览器事件循环中的两种任务类型。宏任务包括整体代码块、setTimeout等,微任务有Promise.then、MutationObserver等。每个宏任务执行完毕后,会先执行完所有微任务,再进行下一轮渲染或执行下一个宏任务。
|
11月前
|
Web App开发 Python
DrissionPage 实战:极简壁纸爬取之旅
本文介绍了如何使用DrissionPage工具自动化爬取极简风格的壁纸图片。通过简单的环境搭建和代码实现,展示了从访问目标网站、定位图片元素到下载保存的全过程。文中还提供了详细的代码示例,帮助读者快速上手。
447 4
|
网络协议 网络架构
eNSP DHCP的配置
模拟华为设备中,路由器-交换机-PC三台设备,路由器作为DHCP服务器,PC作为DHCP客户端
阿里云软件著作权登记申请流程
阿里云软件著作权登记申请流程,阿里云计算机软件著作权登记20天下证,那么如何申请阿里云软件著作权登记呢?阿里云百科来详细说下注册账号、实名认证、软件著作权选择、信息填写、纸质材料邮寄一直到版权中心审查和下证详细说明:
647 1
阿里云软件著作权登记申请流程
|
搜索推荐 开发工具 数据安全/隐私保护
注册Github账号详细教程
一、GitHub的简介 1、大概介绍 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。 2、详细介绍 https://baike.baidu.com/item/github/10145341 二、如何注册自己的GitHub账户 1、进入github的官网 https://github.com/https://github.com/ 2、点击右上角注册按钮sign up,来到注册页面
1104 0