力扣78. 子集(java 回溯解法)

Problem: 78. 子集

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述

思路

我们易知,本题目涉及到对元素的穷举,即我们可以使用回溯来实现。对于本题目我们应该较为注重回溯中的决策阶段

由于涉及到对数组中元素的穷举,即在每一决策阶段,我们涉及到是否选择当前元素(是否将当前决策阶段的元素添加到决策路径中),即我们可以利用递归先将所有的不选择添加到决策路径的元素,递完,再在的过程中继续递归选择添加到决策路径(描述的可能比较模糊,直接看决策树与代码更便于理解!!!)
image.png

解题方法

1.定义成员变量result(二维集合)
2.调用并编写回溯函数(从阶段0开始回溯(实际上只是便于配合数组元素的下标索引为0))
3.回溯函数:

3.1当决策阶段(假设为k)等于题目所给的数组nums的长度时,则将当前的决策路径添加到二维结果集result
3.2先递归所有不选择当前决策阶段元素,再在归的过程中先添加当前决策阶段的元素到决策路径,再继续递归选择当前决策阶段元素
3.3在递完选择当前决策阶段元素后需要删除当前决策路径中的最后一个元素

复杂度

时间复杂度:

O ( n × 2 n ) O(n \times 2^n) O(n×2n)

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution {//Two-dimensional result setprivate List<List<Integer>> result = new ArrayList<>();/***Return all subsets* @param nums Universal set* @return List<List<Integer>>*/public List<List<Integer>> subsets(int[] nums) {backtrack(nums, 0, new ArrayList<Integer>());return result;}/*** Backtracking function is used to find all subsets* @param nums Optional combination* @param k Decision stage* @param path Decision path*/private void backtrack(int[] nums, int k, List<Integer> path) {if (k == nums.length) {result.add(new ArrayList<>(path));return;}//Recursion that does not select the current decision stage elementbacktrack(nums, k + 1, path);//Add the current decision stage element to decision stagepath.add(nums[k]);//Recursion which selects the current decision stage elementbacktrack(nums, k + 1, path);//Remove the last element of current decision pathpath.remove(path.size() - 1);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/205561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode刷题笔记题解(C++):165. 比较版本号

思路&#xff1a;利用小数点来分开求和&#xff0c;判断和是否相等来推断两个版本号是否一致 class Solution { public:int compareVersion(string version1, string version2) {int i0;//记录version1的字符下标int j0;//记录version2的字符下标int num10;//保存version1的和…

对于并发修改同一条数据的处理方案

业务场景&#xff1a; 批量消费Kafka数据&#xff0c;一个批次针对同一条数据做新增和修改操作&#xff0c;当前一条数据还未更新完成&#xff0c;后一条数据也同步修改&#xff0c;数据就存在异常&#xff1b; 单机模式&#xff1a; &#xff08;一&#xff09…

Unity传送门特效: The Beautiful Portal/Level up/Teleport/Warp VFX

7种不同风格的传送门特效! 每个传送门都有一个轻型和重型版本。 每个版本都有一个"无循环”和一个"无限”预制件:D 总共有28个预制件 -VFX完全使用Unity的粒子系统和基本的Unity着色器。 使用标准渲染管道中制作了这个资产。所以VFX的功能就像视频宣传片一样。 同时,…

怎样用Ajax提交from表单并接收其中的json数据

怎样用Ajax提交表单并接收其中的json数据 需求&#xff1a;实现点击按钮后&#xff0c;数据以表单形式提交至服务器&#xff0c;并接收来自服务器的返回数据。过程中页面不刷新。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。AJAX 是与服务器交换数据并…

解析5种常用的Python设计模式

大家好&#xff0c;Python是一种非常流行的编程语言&#xff0c;它易于学习、灵活且功能强大&#xff0c;在各个领域广泛应用。很多人误认为Python是一种面向过程的语言&#xff0c;无法很好地支持面向对象的编程风格。这种观念是错误的&#xff0c;Python不仅支持面向对象编程…

Spring AOP从入门到精通

目录 1. AOP的演化过程 1. 代理模式 2. 动态代理 2.1 JDK动态代理 2.2 Cglib动态代理 3. Spring模式 3.1 ProxyFactory 3.2 ProxyFactoryBean 3.3 AbstractAutoProxyCreator 2. Spring AOP抽象 1. 核心术语 1.1 连接点(JoinPoint) 1.2 切点(Pointcut) 1.3 增强(Ad…

C# Solidworks二次开发:三种获取SW设计结构树的方法-第二讲

今天这篇文章是接上一篇文章的&#xff0c;主要讲述的是获取SW设计结构树节点的第二种方法。 这个方法获取节点的逻辑是先获取最顶层节点&#xff0c;然后再通过获取顶层节点的子节点一层一层的把所有节点都找出来&#xff0c;也就是需要递归。想要用这个方法就要了解下面几个…

tomcat环境搭建

镜像下载地址&#xff1a;https://mirror.tuna.tsinghua.edu.cn/apache/tomcat/ 配置环境变量 添加系统变量 编辑Path 测试 dos窗口运行startup启动tomcat 访问http://localhost:8080/

【LeeCode】454. 四数相加 II

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2],…

【每日一题】—— D. Divide and Equalize(Codeforces Round 903 (Div. 3))(数学、数论)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

Linux操作系统 中的用户管理,也就是关于用户的相关的操作与理解

目录 1 概念2 用户管理的类型3、模板目录4 查看历史命令5 相关文件6 创建用户useradd7 命令passwd 存储及shadow命令下的用户密码8 usermod命令&#xff08;修改属性&#xff09;9 密码设置10 删除命令userdel11 用户组的操作12 用户权限13 创建一个用户组&#xff0c;并且将这…

ORA-600 kcbzib_kcrsds_1一键恢复

一个19c库由于某种原因redo损坏强制打开库报ORA-600 kcbzib_kcrsds_1错误 SQL> startup mount pfile?/database/pfile.txt; ORACLE instance started. Total System Global Area 859830696 bytes Fixed Size 9034152 bytes Variable Size 5…

我们一起聊一聊JWT的那些事

我们一起聊一聊JWT的那些事 一切美好&#xff0c;如期而至… 什么是JWT JWT&#xff0c;全称为 JSON Web Token&#xff0c;是一种用于在网络上安全地传递信息的开放标准&#xff08;RFC 7519&#xff09;。JWT 是一种紧凑且独立的方式&#xff0c;用于在各方之间以 JSON 对象…

为了逃离数学,阴差阳错与数学绑定了

还记得当初自己为什么选择计算机&#xff1f; 当初你问我为什么选择计算机&#xff0c;我笑着回答&#xff1a;“因为我梦想成为神奇的码农&#xff01;我想像编织魔法一样编写程序&#xff0c;创造出炫酷的虚拟世界&#xff01;”谁知道&#xff0c;我刚入门的那天&#xff0…

javaTCP协议实现一对一聊天

我们首先要完成服务端&#xff0c;不然出错&#xff0c;运行也要先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.Actio…

AtCoder Beginner Contest 330

A - Counting Passes (atcoder.jp) AC代码: #include<bits/stdc.h> #define endl \n //#define int long long using namespace std; const int N110; int a[N]; int n,l; void solve() {cin>>n>>l;for(int i1;i<n;i) cin>>a[i];int ans0;for(int…

消费1000返1500元,买了4罐奶粉倒赚商家2000元?商家亏吗?

大家好&#xff0c;我是微三云胡佳东&#xff0c;一个深耕私域电商模式玩法的互联网人&#xff01;&#xff01; 在当前的全球经济环境下&#xff0c;消费增值的概念正逐渐受到广泛的关注。这一模式的崛起&#xff0c;不仅仅是一种商业模式的创新&#xff0c;更代表着我们对经…

[⑦ADRV902x]: JESD204学习笔记

前言 JESD204B/C基于SERDES&#xff08;SERialization/DESerialization&#xff09;技术&#xff0c;也就是串化和解串&#xff0c;在发送端将多位并行的数据转换为1 bit的串行数据&#xff0c;在接收端将串行数据恢复成原始的并行数据。 在JESD204接口出现以前&#xff0c;数…

TOC清洁验证棉签:擦拭取样清洁验证专用的强力助手!

由PP聚丙烯杆聚酯纤维布头构成的TOC清洁验证棉签&#xff0c;用于清洁验证协议的表面采样取样&#xff0c;对难以到达的区域或狭小空间的精密清洗等。 棉签杆使用聚丙烯制作,杆上的缺口能使棉签头在较小的操作及污染下放进小瓶中,具有较好的化学相容性。 有缺口的分离式手柄允许…

class036 二叉树高频题目-上-不含树型dp【算法】

class036 二叉树高频题目-上-不含树型dp code1 102. 二叉树的层序遍历 // 二叉树的层序遍历 // 测试链接 : https://leetcode.cn/problems/binary-tree-level-order-traversal/ code1 普通bfs code2 一次操作一层 package class036;import java.util.ArrayList; import java…