【算法刷题 | 回溯思想 06】4.17(子集、子集||)

在这里插入图片描述

文章目录

9.子集

9.1题目

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

  • 示例一:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
  • 示例二:
输入:nums = [0]
输出:[[],[0]]

9.2解法:回溯

9.2.1回溯思路

image-20240417125635959

(1)函数返回值以及参数
private void backing(int startIndex,int[] nums)
(2)终止条件
  • 每次递归遍历都要把当前子集加进res中

  • 当startIndex大于数组长度,则结束递归

res.add(new ArrayList(paths));
if(startIndex>=nums.length-1){return;
}
(3)遍历过程
for(int i=startIndex;i<nums.length;i++){paths.add(nums[i]);backing(i+1,nums);//回溯paths.remove(nums.length-1);
}

9.2.2代码实现

	List<List<Integer>> res=new ArrayList<>();List<Integer> paths=new ArrayList<>();public List<List<Integer>> subsets(int[] nums) {backing(0,nums);return res;}private void backing(int startIndex,int[] nums){res.add(new ArrayList(paths));if(startIndex>nums.length-1){return;}for(int i=startIndex;i<nums.length;i++){paths.add(nums[i]);backing(i+1,nums);//回溯  paths.remove(paths.size()-1);}}

10.子集 ||

10.1题目

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

  • 示例一:
输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
  • 示例二:
输入:nums = [0]
输出:[[],[0]]

10.2解法:回溯

10.2.1回溯思路

  • 先将数组排序,这样重复元素肯定相邻
  • 同一树层,不可以使用同一元素;同一树枝,可以使用同一元素;
  • isUsed[i]:为true,则代表同一树枝用到了元素nums[i],isUsed[i+1]还可以用

image-20240417135008494

10.2.2代码实现

	List<List<Integer>> res=new ArrayList<>();List<Integer> paths=new ArrayList<>();boolean[] isUsed;public List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);isUsed=new boolean[nums.length];Arrays.fill(isUsed,false);backing(0,nums);return res;}private void backing(int startIndex,int[] nums){res.add(new ArrayList(paths));if(startIndex>nums.length-1){return;}for(int i=startIndex;i<nums.length;i++){if(i!=0 && nums[i]==nums[i-1] && isUsed[i-1]==false){//该元素在同一树层已经用过了continue;}{paths.add(nums[i]);isUsed[i]=true;backing(i+1,nums);//回溯  paths.remove(paths.size()-1);isUsed[i]=false;}}}

在这里插入图片描述

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

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

相关文章

(2022级)成都工业学院数据库原理及应用实验五: SQL复杂查询

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询&#xff1a; 1、查询医生…

C++ 抽象

关键字&#xff1a;virtual 在C中可以使用关键字 virtual将函数声明为抽象函数&#xff0c;从而对类进行抽象&#xff1b;至少有一个成员函数为抽象函数的类将被视为抽象类。抽象类无法进行实例化&#xff0c;因而抽象类在C中一般是为了给其他类提供一个可以继承的适当的基类作…

DSSAT作物模型建模方法与进阶基于Python语言快速批量运行DSSAT模型及交叉融合、扩展应用技术应用

随着数字农业和智慧农业的发展&#xff0c;基于过程的作物生长模型&#xff08;Process-based Crop Growth Simulation Model&#xff09;在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。Decisi…

React Flow浏览器默认事件失效问题解决

前情提要 React Flow可以使用滑轮来实现对于该部分区域的放大和缩小&#xff0c;并且自动拦截浏览器默认的滑轮和滑轮按键组合事件&#xff0c;如&#xff1a;Ctrl鼠标滑轮事件。那么这就导致在非该区域的地方使用了浏览器默认的滑轮事件且改变了原有页面的大小时&#xff0c;…

libftdi1学习笔记 8 - MPSSE SPI优化速度

之前用GPIO模拟SPI速度有点慢&#xff0c;加上直接发送字节的方式实现SPI。 1. IO的定义 如果不使用模拟的方式&#xff0c;则SCK&#xff0c;MOSI&#xff0c;MISO必须固定。通过这3个IO判断是哪种模式 if(spi[port].sck ! 0 || spi[port].mosi_io0 ! 1 || spi[port].miso_…

basic_string_view解析

src\rttr\string_view.h 对github项目rttr&#xff08;C反射库&#xff09;解析&#xff0c;链接&#xff1a;https://github.com/rttrorg/rttr template<typename CharT, typename Traits std::char_traits > class basic_string_view 私有成员变量 const value_ty…

安卓官方例程

https://learn.microsoft.com/zh-cn/shows/connecton-demand/202?sourcerecommendations https://learn.microsoft.com/zh-cn/visualstudio/cross-platform/cross-platform-mobile-development-in-visual-studio?viewvs-2022 https://learn.microsoft.com/zh-cn/shows/xamari…

pta L1-063 吃鱼还是吃肉

L1-063 吃鱼还是吃肉 分数 10 全屏浏览 切换布局 作者 陈越 单位 浙江大学 国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤&#xff1b;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。 现在你要根据小宝宝的身高体重&#xff0c;给出补充营养的…

Abstract Factory抽象工厂模式详解

模式定义 提供一个创建一系列相关或互相依赖对象的接口&#xff0c;而无需指定它们具体的类。 代码示例 public class AbstractFactoryTest {public static void main(String[] args) {IDatabaseUtils iDatabaseUtils new OracleDataBaseUtils();IConnection connection …

前端页面助手 (vue)

快速开发页面&#xff08;图形化开发页面&#xff09; 自主编辑 然后自己也可以修改属性 最后导出页面即可 github地址 ;https://github.com/opentiny/tiny-engine

图灵奖简介及2023年获奖者Avi Wigderson的贡献

No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 2023年的…

9月BTE第8届广州国际生物技术大会暨展览会,全媒体聚焦下的高精尖行业盛会

政策春风助力&#xff0c;共迎大湾区生物医药行业50亿红利 今年3月“创新药”首次写入国务院政府工作报告之后&#xff0c;广州、珠海、北京多地政府纷纷同步出台了多项细化政策&#xff0c;广州最高支持额度高达50亿元&#xff0c;全链条为生物医药产业提供资金支持&#xff…

service-mesh

01 架构的发展历史 1.1单机小型时代 1.2 垂直坼分 1.3 集群化负载均衡架构 用户量越来越大&#xff0c;就意味着需要更多的小型机&#xff0c;但是小型机价格昂贵&#xff0c;操作维护成本高。 此时更优的选择是采用多个 pc 机部署同一个应用的方案&#xff0c;但是此时就需…

P1039 [NOIP2003 提高组] 侦探推理

注意换行符&#xff01;&#xff01;&#xff01; 如果你使用getchar()系列函数读入&#xff0c;并且用换行符判定是否结束&#xff0c;则换行符会导致你WA掉&#xff01; linux下换行符为’\n’&#xff0c;windows下换行符为’\r\n’&#xff0c;如果数据是windows下造的&a…

单片机小项目——直流电机+按键

利用普中单片机的代码实现在按下第k个独立按键时&#xff0c;直流电机运作k秒 #include "reg52.h"typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; sbit DC_MotorP1^0; //定义独立按键控制脚 sbit KEY1P3^1; sbit KEY2P3^0; sb…

代码学习记录45---单调栈

随想录日记part45 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.17 主要内容&#xff1a;今天开始要学习单调栈的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;每日温度 &#xff1b;下一个更大元素 I 739. 每日温度 496.下一个更大元素 I Topic…

【力扣】55. 跳跃游戏 - 力扣(LeetCode)

Problem: 55. 跳跃游戏 记录自己解答的思路和代码 文章目录 问题思路复杂度Code 问题 思路 这个题的主要思路就是先找到0对应的位置&#xff0c;然后标记起来对应left&#xff0c;如果只有一个零&#xff0c;只需要left后面的数中有>1的数就能跳过去&#xff0c;如果是00&a…

静态成员与友元,内部类初识

一.静态成员 1.静态成员变量 &#xff08;1&#xff09;定义&#xff1a; 类的定义中以静态声明的变量 &#xff08;2&#xff09;写法&#xff1a; static 变量声明 &#xff08;3&#xff09;注意&#xff1a; 静态成员变量不在对象中&#xff0c;在静态区&#xff0c…

ROS仿真小车(二)——添加摄像头雷达传感器

文章目录 前言一、在 Rviz 中显示一个盒状机器人1.1 创建ROS功能包1.2 在 launch 文件中集成 URDF 与 Rviz1.3 在 Rviz 中显示机器人模型1.4 优化 rviz 启动 二、创建一个四轮圆柱状机器人模型2.1 配置urdf和launch文件2.2 URDF优化_xacro2.2.1 配置xacro文件2.2.2 编写 Xacro …

深度学习:Pytorch分布式训练

深度学习&#xff1a;Pytorch分布式训练 简介模型并行数据并行参考文献 简介 在深度学习领域&#xff0c;模型越来越庞大、数据量不断增加&#xff0c;训练这些大型模型越来越耗时。通过在多个GPU或多个节点上并行地训练模型&#xff0c;我们可以显著减少训练时间。此外&#…