java错位_【LeetCode(Java) - 634】寻找数组的错位排列
【LeetCode(Java) - 634】寻找数组的错位排列
【LeetCode(Java) - 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(Java) - 634】寻找数组的错位排列相关教程
java错位_【LeetCode(Java) - 634】寻找数组的错位排列相关推荐
- 634 寻找数组的错位排列
题目描述: 在组合数学中,如果一个排列中所有元素都不在原先的位置上,那么这个排列就被称为错位排列. 给定一个从 1 到 n 升序排列的数组,你可以计算出总共有多少个不同的错位排列吗? 由于答案可能非常 ...
- LEETCODE | PYTHON | 724 | 寻找数组的中心下标
LEETCODE | PYTHON | 724 | 寻找数组的中心下标 1. 题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等 ...
- aspose.cell for java 去水印_【Java编程基本功】(十)输出杨辉三角,输出*号,数组移动...
不知道,小伙伴们有没有试着去敲一下代码呢其实学习就是这样的,没有捷径可走,要想比别人做的好,唯有比别人更努力.希望都小伙伴们可以坚持的学下去一起加油吧~ 第三十一题 打印出杨辉三角形(要求打印出10行 ...
- 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...
最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...
- java 一二三四五_五道java小题,补更四道java小题
一:分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 2.删除集合中字符串"def" 3.然后利用迭代器遍历集合元素并输出 import java.util.Arr ...
- java安装_使用Java 9模块化来发布零依赖本机应用程序
java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...
- java掌握_掌握Java 11的Constantdynamic
java掌握 为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集. Java开发人员通常不会注意到此功能,因为该功能已隐藏在Java字节码中. 简而言之,通过 ...
- 易语言 java支持_开源Java客户端可以连接易语言服务器
我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...
- java编译_解析 Java 即时编译器原理。
↑ 点击上面 "时代Java"关注我们,关注新技术,学习新知识! 一.导读 常见的编译型语言如C++,通常会把代码直接编译成CPU所能理解的机器码来运行.而Java为了实现&quo ...
最新文章
- 三、Oracle的简单查询
- 什么叫做坐标系的平移和旋转.
- 对象测试_测试|你挑恋爱对象的眼光准不准?
- 模块讲解----shutil模块(copy、压缩、解压)
- Win2003中apache2整合tomcat5和iis6
- asp.net core 2.0 web api基于JWT自定义策略授权
- java中 有没有方法将浏览器标签栏去掉_用JS去掉IE窗口的标题栏,工具栏,地址栏...
- Redis(零):背景
- Python SHA1加密算法
- 工行高级经理林承军:工行基于 MySQL 构建分布式架构的转型之路
- timestamp类型的数据如何赋值_VBA一组代码如何搞定赋值给数组arr及回填数据给工作表...
- PHP大批量插入数据库的3种方法和速度对比
- python实现的 AWGN信道下QPSK调制信号的平均相位估计
- HackerRank难题记录
- USB免驱摄像头采集图像【VS2012+opencv+directShow(CcameraDS)实现】
- 多张图片合成一张图片
- java win7 管理员权限_win7系统获取管理员权限批处理的操作方法
- 英特尔服务器新消息,又一个时代的眼泪!英特尔安腾处理器走完20年成为历史...
- asp.net 调试 无法显示该网页
- echarts圆柱形带背景图