文章目录

  • 1、题目描述
  • 2、解题思路
  • 3、解题代码

1、题目描述

2、解题思路

  把题目转换为:对一个完美排序的序列,转换成错位排列,共有多少种排法。

  先拿数字 n 开刀,有 n-1 个位置可以选,假设选择位置 k 来放数字 n:

  现在数字 k 的位置被数字 n 给占领了,就得给数字 k 找出路了,有以下两种情况:

  1、如果必须把数字 k 放到位置 n 中:

  这样,问题就变为对剩余的 n-2 个数字进行错位排列,因此结果等同于 dp[n-2]

  2、如果必须把数字 k 放置到非位置 n 的地方,这又回到一开始的时候,即对 n-1 个数字进行错位排列,只是变为先拿数字 k 开刀了。因此结果等同于 dp[n-1]。

  上面两种情况都是包含的,且由于 k 可以是 [1, n-1] 中的任意一个数字,因此 dp[n] = (n-1) × (dp[n-1] + dp[n-2])。

  注意:凡是遇到这种答案可能非常大,要你对结果进行取模的,一律按照以下方式处理:

  1、dp 数组的类型为 long;

  2、每次取出 dp 的某个值进行运算后,赋值回给新的 dp 之前都进行取模;

  3、对要返回的 dp 强制类型转换为 int 即可。

3、解题代码

public class Solution {public int findDerangement(int n) {int mod = 1_000_000_000 + 7;if (n == 1) return 0;// dp[i] 表示 i 个数进行错位排列的方案数long[] dp = new long[n + 1];dp[1] = 0;dp[2] = 1;for (int i = 3; i <= n; i++) {dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2]);dp[i] %= mod;}return (int)dp[n];}
}

【LeetCode - 634】寻找数组的错位排列相关推荐

  1. 634 寻找数组的错位排列

    题目描述: 在组合数学中,如果一个排列中所有元素都不在原先的位置上,那么这个排列就被称为错位排列. 给定一个从 1 到 n 升序排列的数组,你可以计算出总共有多少个不同的错位排列吗? 由于答案可能非常 ...

  2. java错位_【LeetCode(Java) - 634】寻找数组的错位排列

    [LeetCode(Java) - 634]寻找数组的错位排列 [LeetCode(Java) - 634]寻找数组的错位排列 文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解 ...

  3. LeetCode-Python-634. 寻找数组的错位排列(数学 + 错排公式)

    在组合数学中,如果一个排列中所有元素都不在原先的位置上,那么这个排列就被称为错位排列. 给定一个从 1 到 n 升序排列的数组,你可以计算出总共有多少个不同的错位排列吗? 由于答案可能非常大,你只需要 ...

  4. leetcode 724. 寻找数组的中心索引

    给定一个整数类型的数组 nums,请编写一个能够返回数组 "中心索引" 的方法. 我们是这样定义数组 中心索引 的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如 ...

  5. 容斥原理应用之:错位排列

    容斥原理应用之:错位排列 先解释一下什么是错位排列,原先的值不在原先的位置上,就是错误排列,比如下面这两个数组: <?php$array=[0=>0,1=>1,2=>2,3=& ...

  6. LEETCODE | PYTHON | 724 | 寻找数组的中心下标

    LEETCODE | PYTHON | 724 | 寻找数组的中心下标 1. 题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等 ...

  7. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  8. LeetCode 40. 组合总和 II(排列组合 回溯)

    1. 题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...

  9. [二分搜索|快速选择] leetcode 4 寻找两个正序数组的中位数

    [二分搜索|快速选择] leetcode 4 寻找两个正序数组的中位数 1.题目 题目链接 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组 ...

最新文章

  1. 有大佬通过研发这款Chrome插件的使用教程,赚了上百万! 网友:互联网的钱太好赚了~...
  2. android数据存储方式(三)----Files
  3. 理解JSON对象:JSON.parse、 JSON.stringify
  4. 数据处理的两个基本问题05 - 零基础入门学习汇编语言42
  5. 【Flutter教程】从零构建电商应用(一)
  6. Python之异常追踪模块:traceback
  7. 红帽子RedHat Linux 9.0
  8. 看完就能用!这本Python3.6 的书玩大了!网友:牛!
  9. JS Cookies
  10. 【基于STM32F407IGT6】STemWin5.20d + uCOS-III + FatFS程序下载
  11. 小甲鱼java视频_b站有哪些好的java视频?
  12. 小学计算机教室使用汇报材料,勃李小学“教育信息化示范学校”汇报材料
  13. 【数据结构】图(最短路径Dijkstra算法)的JAVA代码实现
  14. 车载网络测试 - UDS诊断篇 - 诊断数据简析
  15. Win11安装Android子系统
  16. 大学计算机系英语自我介绍,计算机专业复试英语自我介绍范文
  17. 云计算、大数据和人工智能之间的关系----详细说明
  18. 计算机专业领域和英语,专业、领域和职业的英语表达法
  19. 2021-2025年中国人工膝关节行业市场供需与战略研究报告
  20. VMware公司成为Linux基金会金牌会员

热门文章

  1. ad转换汇编语言程序_C程序如何转换成汇编
  2. H5:画布Canvas基础知识讲解(三)之文字、阴影、颜色渐变
  3. 利用MSSQL getshell
  4. 很多人,很多事,总是在不经意间与我们檫肩而过
  5. 学习PCL心得体会——结构点云(Organized PointClouds)
  6. 漏洞复现之xxe漏洞
  7. 使用Exchange同步联系人/日历/邮件
  8. 三国志战略版:Daniel_S2华夏吕深入分析
  9. 数据结构与算法题目集PTA
  10. 收藏 | 数据分析师面试指南——自我定位篇