LeetCode--(动态规划)信件排错

一道LeetCode题目,探讨当n个人收到邮件时,如何统计所有人收到错误邮件(即没有收到自己的邮件)的所有可能性。通过动态规划求解问题,描述了解题思路和状态转移方程,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

题目大意

NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件?
 即没有人收到属于自己的邮件。

解题思路

定义一个数组dp表示存储错误方式数量,dp[i]表示i个邮件和人的错误发送数量。

  • 把第n个元素放在一个位置,比如位置k,一共有n-1种方法。
  • 放编号为k的元素,这时有两种情况:
    (1)把它放到位置n,那么剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有dp[n-2]种放法。
    (2)把第k个元素不放到位置n的情况,那么对于n-1个元素,有dp[n-1]种放法。注意:这个地方饶了好久,一直感觉会和情况一有重合的情况,就是k也有可能放到n的位置。但是,此时k的位置已经被占用了,我们可以把n看做是k所对应的专属收件人,这样来说他不能发给
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值