【LeetCode - 634】寻找数组的错位排列
文章目录
- 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】寻找数组的错位排列相关推荐
- 634 寻找数组的错位排列
题目描述: 在组合数学中,如果一个排列中所有元素都不在原先的位置上,那么这个排列就被称为错位排列. 给定一个从 1 到 n 升序排列的数组,你可以计算出总共有多少个不同的错位排列吗? 由于答案可能非常 ...
- java错位_【LeetCode(Java) - 634】寻找数组的错位排列
[LeetCode(Java) - 634]寻找数组的错位排列 [LeetCode(Java) - 634]寻找数组的错位排列 文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解 ...
- LeetCode-Python-634. 寻找数组的错位排列(数学 + 错排公式)
在组合数学中,如果一个排列中所有元素都不在原先的位置上,那么这个排列就被称为错位排列. 给定一个从 1 到 n 升序排列的数组,你可以计算出总共有多少个不同的错位排列吗? 由于答案可能非常大,你只需要 ...
- leetcode 724. 寻找数组的中心索引
给定一个整数类型的数组 nums,请编写一个能够返回数组 "中心索引" 的方法. 我们是这样定义数组 中心索引 的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如 ...
- 容斥原理应用之:错位排列
容斥原理应用之:错位排列 先解释一下什么是错位排列,原先的值不在原先的位置上,就是错误排列,比如下面这两个数组: <?php$array=[0=>0,1=>1,2=>2,3=& ...
- LEETCODE | PYTHON | 724 | 寻找数组的中心下标
LEETCODE | PYTHON | 724 | 寻找数组的中心下标 1. 题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等 ...
- C#LeetCode刷题-数组
数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...
- LeetCode 40. 组合总和 II(排列组合 回溯)
1. 题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...
- [二分搜索|快速选择] leetcode 4 寻找两个正序数组的中位数
[二分搜索|快速选择] leetcode 4 寻找两个正序数组的中位数 1.题目 题目链接 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组 ...
最新文章
- 有大佬通过研发这款Chrome插件的使用教程,赚了上百万! 网友:互联网的钱太好赚了~...
- android数据存储方式(三)----Files
- 理解JSON对象:JSON.parse、 JSON.stringify
- 数据处理的两个基本问题05 - 零基础入门学习汇编语言42
- 【Flutter教程】从零构建电商应用(一)
- Python之异常追踪模块:traceback
- 红帽子RedHat Linux 9.0
- 看完就能用!这本Python3.6 的书玩大了!网友:牛!
- JS Cookies
- 【基于STM32F407IGT6】STemWin5.20d + uCOS-III + FatFS程序下载
- 小甲鱼java视频_b站有哪些好的java视频?
- 小学计算机教室使用汇报材料,勃李小学“教育信息化示范学校”汇报材料
- 【数据结构】图(最短路径Dijkstra算法)的JAVA代码实现
- 车载网络测试 - UDS诊断篇 - 诊断数据简析
- Win11安装Android子系统
- 大学计算机系英语自我介绍,计算机专业复试英语自我介绍范文
- 云计算、大数据和人工智能之间的关系----详细说明
- 计算机专业领域和英语,专业、领域和职业的英语表达法
- 2021-2025年中国人工膝关节行业市场供需与战略研究报告
- VMware公司成为Linux基金会金牌会员