news 2026/5/4 3:02:55

深搜练习(优美的排列)(9)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深搜练习(优美的排列)(9)

一.题目

526. 优美的排列 - 力扣(LeetCode)

二.思路讲解

2.1 思路讲解

本题要求计算从 1 到 n 的所有整数排列中,满足“优美排列”条件的个数。优美排列的定义是:对于排列中的每个位置i(下标从 1 开始),该位置上的数字perm[i]要么能被 i 整除,要么 i 能被 perm[i] 整除。由于 n 最大为 15,我们可以使用深度优先搜索(DFS)来枚举所有可能的排列,并统计符合条件的个数。

与前几道题不同,本题的搜索过程中,每一层可以选择任意一个未被使用过的数字,而不是只能从某个固定起点开始。因此,我们需要一个布尔数组check来标记每个数字是否已经被使用,以避免重复。同时,由于排列的下标从 1 开始,递归函数的终止条件为pos == n + 1(即已经处理完所有位置),此时将计数加 1。

在递归过程中,对于当前位置pos,我们遍历所有尚未使用的数字i(1 到 n),如果ipos满足整除关系(i % pos == 0pos % i == 0),则选择该数字,标记为已使用,然后递归下一位置pos+1;递归返回后,恢复标记(回溯),继续尝试其他数字。

三.代码演示

class Solution { public: int ret; bool check[15]; int countArrangement(int n) { dfs(n,1); return ret; } void dfs(int n,int pos) { //1.递归出口 if(pos == n + 1) { ret++; return; } for(int i = 1;i <= n;i++) { //判断这个数是否用过了 if(check[i] == false) { //判断这个数符不符合优美数的定义 if(i % pos == 0 || pos % i == 0) { check[i] = true; dfs(n,pos+1); check[i] = false; } } } } };

四.代码讲解

一、全局变量设计

为了实现回溯计数,我们定义两个成员变量

  • ret:整型,用于累计满足条件的优美排列个数,初始为 0。

  • check:布尔数组,大小为15(因为 n ≤ 15),check[i]表示数字i是否已经被当前排列使用。初始全为false

二、主函数countArrangement

主函数接收整数n,调用递归函数dfs(n, 1)开始深度优先搜索,最后返回ret。参数pos表示当前正在填充的位置(下标从 1 开始)。

三、递归函数dfs

递归函数dfs(int n, int pos)的含义是:已经为前pos-1个位置填入了数字(且满足优美条件),接下来需要为第pos个位置选择数字。执行流程如下:

1. 递归终止条件

pos == n + 1时,说明已经成功填满了所有 n 个位置,得到了一个完整的优美排列。此时将ret加 1,并返回。

2. 遍历数字并尝试放置

使用for循环遍历所有数字i从 1 到 n,依次尝试将其放入当前位置pos。只有满足以下条件才能选择:

  • 该数字未被使用check[i] == false)。

  • 该数字与当前位置满足整除关系i % pos == 0 || pos % i == 0(优美排列定义)。

如果条件满足,则:

  • check[i]标记为true,表示该数字已被使用。

  • 递归调用dfs(n, pos+1),继续填充下一个位置。

  • 递归返回后,执行回溯:将check[i]重新设为false,以便尝试其他数字。

四、关键细节
  • 下标从 1 开始:题目中位置从 1 计数,因此递归参数pos从 1 开始,终止于n+1

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 3:02:26

C2C接口消息结构与流控制机制解析

1. C2C接口消息结构解析C2C&#xff08;Chip-to-Chip&#xff09;接口作为现代异构计算架构中的关键通信通道&#xff0c;其消息结构的精细设计直接决定了跨芯片通信的可靠性和效率。在协议栈中&#xff0c;消息结构通过精确的字段宽度和编码值定义各类控制与数据交互语义&…

作者头像 李华
网站建设 2026/5/4 2:58:51

从热图到故事:如何用pheatmap的注释(annotation)功能讲好你的数据故事

从热图到故事&#xff1a;如何用pheatmap的注释功能讲好你的数据故事 在生物信息学和组学数据分析领域&#xff0c;数据可视化不仅是展示结果的工具&#xff0c;更是讲述科学故事的语言。当我们面对基因表达矩阵、微生物丰度表或临床指标数据集时&#xff0c;如何让冰冷的数字开…

作者头像 李华
网站建设 2026/5/4 2:58:17

苹果手机视频提取文字实操记录:从视频到可用文稿的完整方案

做视频内容创作的时候,经常卡在这样几个问题上:手机录制的素材怎么快速转成文字、抖音上看到的好文案想提取下来、会议视频需要逐字转写成笔记。截至 2026 年,这类需求的工具大致分成三类——本地 APP、网页工具、微信小程序,其中小程序这条线因为即用即走的特性,在移动端的体验…

作者头像 李华
网站建设 2026/5/4 2:56:38

3层架构解密:如何用MiGPT将小爱音箱改造成AI语音助手

3层架构解密&#xff1a;如何用MiGPT将小爱音箱改造成AI语音助手 【免费下载链接】mi-gpt &#x1f3e0; 将小爱音箱接入 ChatGPT 和豆包&#xff0c;改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 你是否曾对小爱音箱的"人工…

作者头像 李华
网站建设 2026/5/4 2:53:32

从零开始通过 Taotoken 控制台完成注册获取密钥与首次调用的全过程

从零开始通过 Taotoken 控制台完成注册获取密钥与首次调用的全过程 1. 注册 Taotoken 账户 访问 Taotoken 官方网站并点击注册按钮。在注册页面填写必要的个人信息&#xff0c;包括有效的电子邮箱地址和设置账户密码。系统会向您提供的邮箱发送验证邮件&#xff0c;点击邮件中…

作者头像 李华
网站建设 2026/5/4 2:49:27

3步解锁iOS 15-16设备:Applera1n iCloud激活锁完整绕过方案

3步解锁iOS 15-16设备&#xff1a;Applera1n iCloud激活锁完整绕过方案 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当你拿到一部二手iPhone或iPad&#xff0c;开机后却卡在iCloud激活锁界面&#…

作者头像 李华