【LeetCode:2741. 特别的排列 递归 记忆化搜索 动态规划】
时间:2025-06-24 11:38:41 来源:新华社
【字体:  

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 必要的面试算法 | 采访高频算法 🍀
🌲 事情越难,就越要坚持,由于它具有很高的价值,这就是算法✨。
🌲 作者简介:硕风和魏󿀌CSDN-Java领域的优质创作者🏆,研究|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|八股文面经|经验分享|易用网站工具分享💎💎💎
🌲 恭喜你找到一个宝藏博主,快速收入囊中🌻
🌲 人生如棋󿀌我想成为一名中风,虽然行动缓慢󿀌可是谁见过我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录。

    • 🚩 题目链接。
    • 🚩 题目链接。
    • ⛲ 题目描述。
      • 🌟 求解思路&实现代码&运行结果。
        • ⚡ 递归 + 记忆化搜索 + 动态规划。
        • 🥦 求解思路。
        • 🥦 实现代码。
    • 🥦 运行结果。

💬 共勉。

  • 🚩 题目链接。

2741. 特殊排列。

⛲ 题目描述。

给你一个下标从 0 开始的整数数组 nums ,它包含 n 个 互不相同 的正整数。如果 nums 排列符合以下条件,我们称之为特殊排列:
对于 0 <= i < n - 1 的下标 i ,要么 nums[i] % nums[i+1] == 0 ,要么 nums[i+1] % nums[i] == 0 。

请返回特别排列的总数,因为答案可能很大,请将它对 109 + 7 取余 后返回。

请返回特别排列的总数,因为答案可能很大,请将它对 109 + 7 取余 后返回。
示例 1:
输入:nums = [2,3,6]。
输出:2。

说明:[3,6,2] 和 [2,6,3] 是 nums 两个特殊的排列。
示例 2:
输入:nums = [1,4,3]。

输出:2。

说明:[3,1,4] 和 [4,1,3] 是 nums 两个特殊的排列。
提示:

2 <= nums.length <= 14。


1 <= nums[i] <= 109。

🌟 求解思路&实现代码&运行结果。
  1. ⚡ 递归 + 记忆化搜索 + 动态规划。
  2. 🥦 求解思路。
  3. 我们设计了这样一个递归函数,如果dfs(i,cnt),i表示选择的最后一个位置的下标,cnt代表此时选择了多少数字,因此递归。不出意外�时间会超时。
在此基础上,改进缓存,我们发现�答案错误󿀌也就是说,这两个变量不能覆盖所有情况,为什么?因为我们结合flag数组在原递归方法中标记之前选择的情况。
那么如何求解࿱呢?f;想办法替换flag,以前选择的下标情况可以通过一个变量记录。🥦 实现代码。class。)。{ 。flag。[。i。]。=true。 ;res。= (。res。+process。 (。depth。+1。,i。 ,status。|。(。1。<<i。)。)。)。%。1000000007。;flag。[。i。]。=false。;}。}。}。map。.。put。(。key。,res。)。;return。res。;
}。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


}。

🥦 运行结果。

在这里插入图片描述

在这里插入图片描述

💬 共勉。最后,我想和大家分享一个座右铭࿰,一直激励着我c;希望能和大家分享一下#xff01;

[责任编辑:百度一下]
检察日报数字报 | 正义网 |
Copyrights©最高人民检察院 All Rights Reserved.