【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】寻找数组的错位排列相关推荐

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

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

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

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

  3. aspose.cell for java 去水印_【Java编程基本功】(十)输出杨辉三角,输出*号,数组移动...

    不知道,小伙伴们有没有试着去敲一下代码呢其实学习就是这样的,没有捷径可走,要想比别人做的好,唯有比别人更努力.希望都小伙伴们可以坚持的学下去一起加油吧~ 第三十一题 打印出杨辉三角形(要求打印出10行 ...

  4. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...

    最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...

  5. java 一二三四五_五道java小题,补更四道java小题

    一:分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 2.删除集合中字符串"def" 3.然后利用迭代器遍历集合元素并输出 import java.util.Arr ...

  6. java安装_使用Java 9模块化来发布零依赖本机应用程序

    java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...

  7. java掌握_掌握Java 11的Constantdynamic

    java掌握 为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集. Java开发人员通常不会注意到此功能,因为该功能已隐藏在Java字节码中. 简而言之,通过 ...

  8. 易语言 java支持_开源Java客户端可以连接易语言服务器

    我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...

  9. java编译_解析 Java 即时编译器原理。

    ↑ 点击上面 "时代Java"关注我们,关注新技术,学习新知识! 一.导读 常见的编译型语言如C++,通常会把代码直接编译成CPU所能理解的机器码来运行.而Java为了实现&quo ...

最新文章

  1. 三、Oracle的简单查询
  2. 什么叫做坐标系的平移和旋转.
  3. 对象测试_测试|你挑恋爱对象的眼光准不准?
  4. 模块讲解----shutil模块(copy、压缩、解压)
  5. Win2003中apache2整合tomcat5和iis6
  6. asp.net core 2.0 web api基于JWT自定义策略授权
  7. java中 有没有方法将浏览器标签栏去掉_用JS去掉IE窗口的标题栏,工具栏,地址栏...
  8. Redis(零):背景
  9. Python SHA1加密算法
  10. 工行高级经理林承军:工行基于 MySQL 构建分布式架构的转型之路
  11. timestamp类型的数据如何赋值_VBA一组代码如何搞定赋值给数组arr及回填数据给工作表...
  12. PHP大批量插入数据库的3种方法和速度对比
  13. python实现的 AWGN信道下QPSK调制信号的平均相位估计
  14. HackerRank难题记录
  15. USB免驱摄像头采集图像【VS2012+opencv+directShow(CcameraDS)实现】
  16. 多张图片合成一张图片
  17. java win7 管理员权限_win7系统获取管理员权限批处理的操作方法
  18. 英特尔服务器新消息,又一个时代的眼泪!英特尔安腾处理器走完20年成为历史...
  19. asp.net 调试 无法显示该网页
  20. echarts圆柱形带背景图

热门文章

  1. 【华为OD机试真题】完美走位(C++Cjavapython)100%通过率 超详细代码注释 代码解读
  2. Windows原理深入学习系列-访问控制列表
  3. JQuery qrcode插件生成二维码,并转换为image图片可识别
  4. 文件上传Getshell复习~
  5. 68个关键点如何提高人脸姿态检测的准确性?
  6. 分析称,《华尔街日报》夸大ShapeShift洗钱数额逾600万美元(上篇)
  7. 区块链技术与司法碰撞会檫出怎样的火花?
  8. 无需编程即可将chatgpt接入自己的微信公众号
  9. 如果我要用Python偷表情包
  10. 22.11.14补卡 mysql学习笔记