【算法刷题 | 回溯思想 07】4.18(全排列、全排列 ||)

在这里插入图片描述

文章目录

  • 11.全排列
    • 11.1题目
    • 11.2解法:回溯
      • 11.2.1回溯思路
        • (1)函数返回值以及参数
        • (2)函数返回值
        • (3)遍历过程
      • 11.2.2代码实现
  • 12.全排列 ||
    • 12.1题目
    • 12.2解法:回溯
      • 12.2.1回溯思路
      • 12.2.3代码实现

11.全排列

11.1题目

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

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

11.2解法:回溯

11.2.1回溯思路

image-20240418112032340

(1)函数返回值以及参数
private void backing(int[] nums)
(2)函数返回值
if(paths.size()==nums.length){res.add(new ArrayList(paths));return;
}
(3)遍历过程
for(int i=0;i<nums.length;i++){if(isUsed[i]==true)	{//该元素已经用过了continue;}isUsed[i]==true;paths.add(nums[i);backing(nums);//回溯isUsed[i]=false;paths.remove(paths.size()-1);
}

11.2.2代码实现

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

12.全排列 ||

12.1题目

给定一个可包含重复数字的序列 nums按任意顺序 返回所有不重复的全排列。

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

12.2解法:回溯

12.2.1回溯思路

image-20240418114400677

12.2.3代码实现

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

toc

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

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

相关文章

[Leetcode]用栈实现队列

用栈实现队列&#xff1a; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元…

硬件设备杂记——12G SDI及 AES67/EBU

常见的 SDI线缆规格&#xff0c;HD-SDI又被称为1.5G-SDI&#xff0c;具体参数以秋叶原的参数为例 AES67/EBU 目前音频网络标准主要集中在OSI网络体系的第二层和第三层。 第二层音频标准的弊端在于构建音频网络时需要专用的交换机&#xff0c;无法利用现有的以太网络&#xff0c…

apache是什么

​Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用&#xff0c;是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充&#xff0c;将Perl/Python等解释器编译…

Ubuntu22.04.4 - 网络配置 - 笔记

一、设置固定ip 1、cd /etc/netplan 查看文件夹下的配置文件 我这里叫 00-installer-config.yaml 2、sudo nano /etc/netplan/00-installer-config.yaml 完成配置后&#xff0c;按下Ctrl O保存更改&#xff0c;然后按下Ctrl X退出nano编辑器。 3、sudo netplan apply 4、ip …

OpenHarmony UI动画-rebound

简介 rebound是一个模拟弹簧动力学&#xff0c;用于驱动物理动画的库。 下载安装 ohpm install ohos/reboundOpenHarmony ohpm环境配置等更多内容&#xff0c;请参考如何安装OpenHarmony ohpm 使用说明 import rebound from ohos/rebound;功能一&#xff1a;创建维护弹簧对…

python将xml格式文件转成png或者pdf格式

本文主要介绍运行NCCL代码时输出的xml文件该如何转成更加容易观看的图格式 如下是举例&#xff0c;服务器上的PCIE相关的topo xml 文件 <system version"1"><cpu numaid"1" affinity"ffffff00,0000ffff,ff000000" arch"x86_64&q…

数字乡村创新实践推动农业现代化发展:科技赋能农业产业升级、提升农民收入水平与乡村治理效能

随着信息技术的迅猛发展和数字化转型的深入推进&#xff0c;数字乡村创新实践已成为推动农业现代化发展的重要引擎。数字技术的广泛应用不仅提升了农业生产的智能化水平&#xff0c;也带动了农民收入的增加和乡村治理的现代化。本文旨在探讨数字乡村创新实践如何科技赋能农业产…

Tomcat漏洞利用工具-TomcatVuln

检测漏洞清单 CVE-2017-12615 PUT文件上传漏洞 tomcat-pass-getshell 弱认证部署war包 弱口令爆破 CVE-2020-1938 Tomcat 文件读取/包含项目地址 https://github.com/errors11/TomcatVuln TomcatVuln put文件上传 ajp协议漏洞 默认读取web.xml文件&#xff0c;漏洞利用…

【C++】list的介绍及使用说明

目录 00.引言 01.list的介绍 模版类 独立节点存储 list的使用 1.构造函数 2.迭代器的使用 分类 运用 3.容量管理 empty()&#xff1a; size(): 4.元素访问 5.增删查改 00.引言 我们学习数据结构时&#xff0c;学过两个基本的数据结构&#xff1a;顺序表和链表。顺…

C/C++中程序内存区域划分

总结C/C中程序内存区域划分 C/C程序内存分配的几个区域&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执⾏函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的…

【观察】容器化部署“再简化”,云原生体验“再升级”

自2013年云原生概念被提出以来&#xff0c;云原生技术和架构在过去十多年得到了迅速的发展&#xff0c;并对数字基础设施、应用架构和应用构建模式带来了深刻的变革。根据IDC预测&#xff0c;到2024年&#xff0c;新增的生产级云原生应用在新应用的占比将从2020年的10%增加到60…

2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(二)

09 电路设计 前面介绍了系统的硬件框图如下&#xff1a; 硬件基本分为三块&#xff0c;两个摄像节点&#xff0c;一个终端节点。 1. 摄像节点硬件 摄像节点由一个DE10-Nano开发板和一个D8M摄像头实现&#xff0c;DE10-Nano开发板的HDMI接口外接HDMI显示器来显示拍摄到的视频。…