7.11全排列(LC46-M)

算法:

排列和组合很像,但是有顺序。

还是用回溯算法。

与组合不同之处(无startindex,有used数组):

首先排列是有序的,也就是说 [1,2] 和 [2,1] 是两个集合。

可以看出元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用startIndex了。

排列问题需要一个used数组,标记已经选择的元素

画树:

used在树中是一个int数组(Integer占4个字节),使用过的数字就标记为1.

但实际代码中可以用布尔数组(boolean占1个字节)表示。使用过的数字就标记:used[i] = true;这样下次循环中,若used[i] == true,就continue

回溯三部曲:

1.确定函数返回值和参数

返回值:void

参数:

int[] nums:题目给出

boolean[] used:标记是否用过该元素

2.确定终止条件

从树中可知,在叶子结点处收集结果

path.size() == nums.size()

3.单层递归逻辑(for循环)

若 used[i] == true, continue

used[i] = true

path.add(used[i]);

递归
回溯:

(1)path.removeLast()

(2)used[i] = false

调试过程:

原因:

`size()`方法用于获取列表中的元素数量,而`length`属性通常与数组一起使用,用于确定数组的长度。

在Java中,数组的长度是通过`length`属性来获取,而不是`size()`方法。这是因为数组是一个固定大小的数据结构,因此使用属性而不是方法来获取其长度更为合适。

因此,在这种情况下,`nums.length`是正确的,因为`nums`是一个数组,而不是一个列表。对于数组,使用`length`属性来获取其长度是标准的做法。

而对于`path`这样的列表,则需要使用`size()`方法来获取其长度。

正确代码:

class Solution {List<List<Integer>> result = new LinkedList<>();List<Integer> path = new LinkedList<>();public List<List<Integer>> permute(int[] nums) {boolean[] used2 = new boolean[nums.length]; backtracking (nums, used2);return result;}void backtracking (int[] nums, boolean[] used) {//确定终止条件if (path.size() == nums.length) {result.add (new LinkedList(path));return;}//单层递归逻辑,排序的i都从0开始了for(int i=0; i < nums.length; i++){if (used[i] == true) continue;//标记用过的数字used[i] = true;path.add(nums[i]);//递归backtracking (nums, used);//回溯,先入后出//先标记的used,那回溯时,used就后改path.removeLast();used[i] = false;}}
}

时间空间复杂度:

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

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

相关文章

大学物理II-作业1【题解】

1.【单选题】——考查高斯定理 下面关于高斯定理描述正确的是&#xff08;D &#xff09;。 A.高斯面上的电场强度是由高斯面内的电荷激发的 B.高斯面上的各点电场强度为零时&#xff0c;高斯面内一定没有电荷 C.通过高斯面的电通量为零时&#xff0c;高斯面上各点电场强度…

基于被囊群算法优化的Elman神经网络数据预测 - 附代码

基于被囊群算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于被囊群算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于被囊群优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#x…

2023-12-15 LeetCode每日一题(反转二叉树的奇数层)

2023-12-15每日一题 一、题目编号 2415. 反转二叉树的奇数层二、题目链接 点击跳转到题目位置 三、题目描述 给你一棵 完美 二叉树的根节点 root &#xff0c;请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c;假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] &…

lambda表达式和包装器

正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 我们在使用库里的排序算法时如果排序的是自定义类型或者库里默认的排序不能满足我们则需求&…

【力扣100】46.全排列

添加链接描述 class Solution:def permute(self, nums: List[int]) -> List[List[int]]:# 思路是使用回溯if not nums:return []def dfs(path,depth,visited,res):# 出递归的条件是当当前的深度已经和nums的长度一样了&#xff0c;把path加入数组&#xff0c;然后出递归if …

HTML与CSS

目录 1、HTML简介 2、CSS简介 2.1选择器 2.1.1标签选择器 2.1.2类选择器 2.1.3层级选择器(后代选择器) 2.1.4id选择器 2.1.5组选择器 2.1.6伪类选择器 2.2样式属性 2.2.1布局常用样式属性 2.2.2文本常用样式属性 1、HTML简介 超文本标记语言HTML是一种标记语言&…

帆软报表如何灵活控制水印的显示

在帆软报表中如果要显示水印,如果要全部都要显示,只需要到决策系统--安装设置中打开水印开关。如果想要某个报表显示水印,可以在设计器的水印设置中为该报表设置水印。 但是如果碰到这种需求,比如某些人或者某些角色需要显示水印,其他人不显示。或者是预览报表需要显示水印…

[附代码]稳态视觉诱发电位SSVEP之预训练模型提高性能

SSVEP 之深度学习 深度学习已经被广泛运用在脑电信号分析来提高脑机接口的性能,这是一个end-to-end的方法,简单来说,只要搭建好深度学习网络,做好特征工程,然后分类即可,对于一个刚刚接触脑机接口领域深度学习的学习者来说,可以先忽略中间的数学相关的东西,先建一个网…

软件测试/测试开发丨Linux 数据处理三剑客学习笔记

一、Linux 三剑客之 grep 1、 内容检索 获取行&#xff08;单行&#xff09; grep pattern file获取内容 grep -o pattern file获取上下文 grep -A -B -C pattern file 2、 文件检索 递归搜索 grep pattern -r dir/展示匹配文件名 grep -H 111 /tmp/1只展示匹配文件名 grep …

HTML进阶

列表、表格、表单 文章目录 列表、表格、表单01-列表无序列表有序列表定义列表 02-表格表格结构标签-了解合并单元格 03-表单input 标签input 标签占位文本单选框上传文件多选框下拉菜单文本域label 标签按钮 04-语义化无语义的布局标签有语义的布局标签 05-字符实体 01-列表 …

影视后期:Pr 调色处理之风格调色

写在前面 整理一些影视后期相关学习笔记博文为 Pr 调色处理中风格调色&#xff0c;涉及下面几个Demo 好莱坞电影电影感调色复古港风调色赛博朋克风格调色日系小清晰调色 理解不足小伙伴帮忙指正 简单地说就是害怕向前迈进或者是不想真正地努力。不愿意为了改变自我而牺牲目前所…

软考网络工程师教程第五版(2018最新版)

软考网络工程师教程第五版(2018最新版) 内容简介 本书是全国计算机技术与软件专业技术资格(水平)考试指定用书。作者在前4版的基础上,根据网络工程师新版大纲的要求,针对考试的重点内容做了较大篇幅的修订,书中主要内容包括数据通信、广域通信网、局域网、城域网、因特网…

Python 创建第一个项目

打开pycharm编辑器 点击New Project创建一个新项目。 主要修改项目名和项目路径&#xff0c;其它保持默认&#xff0c;点击Create。 当编辑器创建好项目后&#xff0c;我们通过右键项目名&#xff0c;点击New&#xff0c;再点击Python File 创建一个Python文件。 写好文件名&a…

Motionface VoiceFocus使用教程

Motionface VoiceFocus使用教程 1&#xff1a;系统要求 软件运行支持32位/64位window 10/11系统, 其他要求无。 2&#xff1a;下载安装 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 下载VoiceFo…

69.乐理基础-打拍子-大切分与变体

内容来源于&#xff1a;三分钟音乐社 前置内容&#xff1a;66.乐理基础-打拍子-小切分-CSDN博客 上一个内容&#xff1a;68.乐理基础-打拍子-大附点与变体-CSDN博客 大切分&#xff1a; 把每个小切分的每一个音符翻一倍就变成大切分了&#xff0c;小切分是两个十六分音符夹一…

08 通信协议之UART

引言&#xff1a; 从本文开始&#xff0c; 本个专题之后的几篇文章都是讲解嵌入式开发中几种常见的通信协议的&#xff0c; 比如UART, I2C&#xff0c;SPI&#xff0c; CAN总线这些我就不讲了&#xff0c; 没用到过&#xff0c; 学是学不完的&#xff0c; 等用到的时候再去学习…

什么情况下不应该使用 LockWindowUpdate ?

在之前的文章中&#xff0c;我们将了解了 LockWindowUpdate 应该在什么场景下使用&#xff0c;也就是拖动的场景。 今天&#xff0c;我们来看看 LockWindowUpdate 被误用的一些场景。 人们看到 LockWindowUpdate 的“您锁定的窗口将无法重新绘制自身”行为&#xff0c;并将其…

磁盘阵列(RAID)

1.独立硬盘冗余阵列&#xff08;RAID, Redundant Array of Independent Disks&#xff09; 旧称廉价磁盘冗余阵列&#xff08;Redundant Array of Inexpensive Disks&#xff09;&#xff0c;简称磁盘阵列 用虚拟化存储技术把多个硬盘组合起来&#xff0c;成为一个或多个硬盘阵…

Spark魔力:招聘网站数据深度分析系统

Spark魔力&#xff1a;招聘网站数据深度分析系统 简介数据集技术栈功能特点创新点 简介 在本文中&#xff0c;我们将介绍一款基于Spark的招聘网站数据分析系统&#xff0c;该系统使用爬取的前程无忧招聘数据。通过结合Flask、Pandas、PySpark、以及MySQL等技术&#xff0c;实现…

大数据机器学习GAN:生成对抗网络GAN全维度介绍与实战

文章目录 大数据机器学习GAN&#xff1a;生成对抗网络GAN全维度介绍与实战一、引言1.1 生成对抗网络简介1.2 应用领域概览1.3 GAN的重要性 二、理论基础2.1 生成对抗网络的工作原理2.1.1 生成器生成过程 2.1.2 判别器判别过程 2.1.3 训练过程训练代码示例 2.1.4 平衡与收敛 2.2…