从零学算法46

46.给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1]
输出:[[1]]
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums 中的所有整数 互不相同

  • 典型的全排列问题,直接套回溯算法模板就行,每次从剩余的数字中挑选一个添加到数组,用 boolean[] selected 记录某个数是否已被使用
  •   List<List<Integer>> res = new ArrayList<>();int[] nums;boolean[] selected;public List<List<Integer>> permute(int[] nums) {this.nums = nums;selected = new boolean[nums.length];dfs(new ArrayList<>());return res;}public void dfs(List<Integer> list){// 根据当前 list 长度判断是否已经完成一种组合if(list.size()==nums.length){res.add(new ArrayList<Integer>(list));return;}// 找出没被使用过的数字添加到 list 进行递归for(int i=0;i<nums.length;i++){if(selected[i])continue;selected[i]=true;list.add(nums[i]);dfs(list);list.remove(list.size() - 1);selected[i]=false;}}
    
  • 同样使用回溯算法,还能用交换数组的值的方式来实现。比如长度为 3 的数组 [1,2,3],第 1 位和第 2,3 位都试着交换位置,这样也就等于得到了每个第一位确定的结果即 [1xx,2xx,3xx],在各自基础上继续同理交换能得到 [12x,13x,21x,23x,32x,31x],其实到这里就可以确定组合方式,因为最后一个数字是已经确定了的,比如 12x 必定为 123
  •   List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> permute(int[] nums) {dfs(nums, 0);return res;}public void dfs(int[] nums, int index){//到最后一个数字,不用再交换了,直接把数组转化为listif (index == nums.length - 1) {//把数组转为listList<Integer> tempList = new ArrayList<>();for (int num : nums)tempList.add(num);//把list加入到res中res.add(tempList);return;}// 因为要顺着之前的基础交换,所以注意 i 从 index 开始for(int i=index;i<nums.length;i++){// 交换swap(nums,index,i);dfs(nums,index+1);// 换回来swap(nums,index,i);}}//交换两个数字的值private void swap(int[] nums, int i, int j) {if (i != j) {nums[i] ^= nums[j];nums[j] ^= nums[i];nums[i] ^= nums[j];}}
    
  • 递归:假如我们要得到 [1,2,3] 的全排列,如果我们得到了 [2,3] 的全排列,那么我们只需要把最后的 1 试着放入不同的位置的即可,比如 [2,3] 全排列为 [23,32],我们根据 23 可以得到 [123, 213, 231],对 32 同理操作,最终就得到了我们想要的结果。
  • 即我们会得到 [3] -> [23,32]->[…]
  •   public List<List<Integer>> permute(int[] nums) {return helper(nums, 0);}/*** @param nums* @param index 递归当前数字的下标* @return*/private List<List<Integer>> helper(int[] nums, int index) {List<List<Integer>> res = new ArrayList<>();//递归的终止条件,如果到最后一个数组,直接把它放到res中if (index == nums.length - 1) {//创建一个临时数组List<Integer> temp = new ArrayList<>();//把数字nums[index]加入到临时数组中temp.add(nums[index]);res.add(temp);// 要从例子中的 [3] 开始返回上一层处理了return res;}//处理过程,计算后面数字的全排列,第一次来这是从 [3] 开始List<List<Integer>> subList = helper(nums, index + 1);//集合中每个子集的长度int count = subList.get(0).size();//遍历集合subList的子集(或者说遍历 [xxx] 的全排列,比如遍历 [2,3] 的全排列 [23,32])for (int i = 0, size = subList.size(); i < size; i++) {//把当前数字nums[index]添加到子集的每一个位置for (int j = 0; j <= count; j++) {List<Integer> temp = new ArrayList<>(subList.get(i));temp.add(j, nums[index]);res.add(temp);}}// 例子中第一次来这会返回 [23,32],然后返回上一层同样处理return res;}
    

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

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

相关文章

Leetcode20-唯一摩尔斯密码词(804)

1、题目 国际摩尔斯密码定义一种标准编码方式&#xff0c;将每个字母对应于一个由一系列点和短线组成的字符串&#xff0c; 比如: ‘a’ 对应 “.-” &#xff0c; ‘b’ 对应 “-…” &#xff0c; ‘c’ 对应 “-.-.” &#xff0c;以此类推。 为了方便&#xff0c;所有 26…

new mars3d.graphic.PolylineEntity({在固定高度开启编辑模式的坐标自定义处理

功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 问题场景&#xff1a; 1.在编辑航线时&#xff0c;需要指定航线坐标在固定高度值上开启编辑模式。 2.关键代码是&#xff1a; graphicLayer.startEditing({开启编辑模式&#xff0c;进行航线的编辑。 解决方案&#xf…

大模型实战营Day4 XTuner 大模型单卡低成本微调实战 作业

按照文档操作&#xff1a; 单卡跑完训练&#xff1a; 按照要求更改微调的数据&#xff1a; 完成微调数据的脚本生成&#xff1a; 修改配置文件&#xff1a; 替换好文件后启动&#xff1a; 启动后终端如图&#xff1a; 用于微调的一些数据显示&#xff1a; 训练时间&#x…

Gd-DOTA-NH2与DOTA-NH2:特点与应用的对比讨论

在生物医学领域&#xff0c;配体化学的重要性日益凸显。其中&#xff0c;Gd-DOTA-NH2和DOTA-NH2就是两种常见的配体&#xff0c;它们在磁共振成像&#xff08;MRI&#xff09;中具有应用。然而&#xff0c;这两种配体的化学结构存在差异&#xff0c;因此它们的应用范围和特性也…

muduo网络库剖析——套接字Socket类

muduo网络库剖析——套接字Socket类 前情从muduo到my_muduo 概要socket网络编程socket编程接口介绍头文件socketbindlistenacceptaccept4connect 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多…

数字孪生+人工智能突破复杂地形和气候提供可靠的电力

利用 Bentley 应用程序实现数字化交付&#xff0c;大大缩短了项目时间和成本&#xff0c;降低了碳排放量 Kalpataru Projects International Limited (KPIL) 正在扩展喀麦隆的电力网络&#xff0c;以改善该国 13% 人口的电网连接和电力供应。根据其项目管理方法&#xff0c;KPI…

Oracle 实战手册 工作实战经验总结

一、基本的数据库管理 高级开发人员需要掌握&#xff0c;了解Oracle数据库运行的基本原理&#xff0c;了解其中的概念。 1、数据库的启动和关闭 2、如何确定Oracle的版本&#xff1f; SQL> select * from v$version 2 / BANNER -------------------------------------…

HarmonyOS 工程目录介绍

工程目录 AppScope&#xff1a;存放应用全局所需要的资源文件 base element&#xff1a;文件夹主要存放公共的字符串、布局文件等资源media&#xff1a;存放全局公共的多媒体资源文件app.json5&#xff1a;应用的全局的配置文件&#xff0c;用于存放应用公共的配置信息 {"…

电动工具直流调速专用集成电路GS069,具有电源电压范围宽、功耗小、抗干扰能力强等特性

GS069电动工具直流调速电路是CMOS专用集成电路&#xff0c;具有电源电压范 围宽、功耗小、抗干扰能力强等特点。通过外接电阻网络&#xff0c;改变与之相接 的VMOS 管的输出&#xff0c;达到控制电动工具转速的作用。该电路输出幅值宽&#xff0c; 频率变化小&#xff0c;占空比…

【微信小程序独立开发1】项目提出和框架搭建

前言&#xff1a;之前学习小程序开发时仿照别人的页面自己做了一个商城项目和小说项目&#xff0c;最近突发奇想&#xff0c;想从0开发一个关于《宠物日记》的小程序&#xff0c;需求和页面都由自己设计&#xff0c;将在这记录开发的全部流程和过程中遇到的难题等... 1、搭建小…

怎样通过交换机封锁MAC地址

第一步&#xff1a;查询该IP所对应的MAC地址 display arp | include ip地址 第二步&#xff1a;封锁mac地址 mac-address blackhole mac地址 vlan 所属vlan-id 以上操作即可封锁

怎么采集今日头条的资讯或文章-简数采集器

如何使用简数采集器快速采集今日头条新闻的资讯或优质文章&#xff1f; 很遗憾&#xff0c;简数采集器暂时不支持采集今日头条上的新闻和文章&#xff0c;不建议采集。 可以换一个采集源进行采集。 简数采集器采集网页文章非常简单&#xff0c;只需输入对应的网址&#xff0…

【卡梅德生物】重组蛋白表达|重组蛋白表达的原理及应用

重组蛋白表达服务在当今生物医学研究和药物开发中扮演着关键的角色。它们为科学家们提供了一种有效的方式来生产和纯化重要的蛋白质&#xff0c;这些蛋白质在基础科学研究、药物研发、疫苗制备和临床诊断中发挥着重要作用。本文将介绍重组蛋白表达服务的基本原理、技术进展以及…

MySQL 删除ibdata1时怎么恢复

标题&#xff1a;MySQL InnoDB数据恢复&#xff0c;丢失ibdata1时怎么安全恢复 废话在前&#xff1a; 恭喜你&#xff0c;当你看到这篇文章的时候&#xff0c;说明有可能 你心里已经有一万匹&#x1f40e;在奔腾了。千万不要乱删除ibdata1&#xff0c;有些博客无脑抓取、复制…

方案解决:5G基站节能及数字化管理

截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5G基站的能耗成为…

GJB5186测试功能的1553B板卡

功能特点 • 支持GJB5186.1-2003、GJB5186.2-2004、GJB5186.3-2003、GJB5186.4-2004、GJB5186.6-2005协议测试项的全部 • 支持GJB5186.1-2003、GJB5186.2-2004、GJB5186.3-2003、GJB5186.4-2004、GJB5186.6-2005电气性能测试的部分 • 提供2个双冗余1553B通道 • 支持…

腾讯云把向量数据库“卷”到哪一步了?

“不是我不明白&#xff0c;这世界变化快”&#xff0c;崔健在20世纪写下的这句歌词&#xff0c;放在刚刚过去的2023年&#xff0c;也同样适用。技术风向的变化之快&#xff0c;让不少人感到惊讶&#xff0c;向量数据库这一年的潮起潮落&#xff0c;就是一个典型的例子。 2023年…

OpenGL ES之深入解析如何实现图像锐化

一、什么是图像锐化? 图像锐化是一种图像处理技术,其目的是增强图像中的细节和边缘,使图像看起来更加清晰。这一过程通常涉及到突出图像中的高频信息,特别是强调像素之间的灰度变化。通过增强图像的高频细节,图像锐化可以改善图像在人类视觉系统和计算机视觉系统中的感知效…

电商API接口主要应用场景有哪些?

随着互联网技术的不断进步和电商行业的迅猛发展&#xff0c;电商API接口在商品交易、物流配送、客户服务等方面发挥着越来越重要的作用。本文将深入探讨电商API接口的技术原理、应用场景、开发方法以及优缺点。 一、技术原理 电商API接口是基于HTTP、TCP、IP等网络协议实现的…

[Kubernetes]10. k8s部署Goweb+mysql项目实战演练

一.安装docker构建镜像 如果要本地构建镜像的话,对应节点还需要安装docker,安装教程见:[Docker]一.Docker 简介与安装 linux环境,centos8下 docker及docker compose安装教程 k8s部署Goweb+mysql项目有两种方法:第一种是传统部署方法,第二种是通过ConfigMap实现应用配置分离部署…