Skip to content

Latest commit

 

History

History

634.Find the Derangement-of-An-Array

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

634.Find the Derangement-of-An-Array

此题的递归关系的分析很有难度。可以借助人来选帽子的情景这么分析:

考虑dp[n]。假设第一个人选择了第i顶帽子(除去第1顶不能选,他共有n-1种选择)。OK,接下来如何呢?对于第i个人(注意这个i是和第一个人的选择对应的),此时有两种选择:

  1. 第i个人选择了第1顶帽子。则剩下的人的编号和帽子的编号
人:     2,3,4,...,i-1,i+1,...,n
帽子:   2,3,4,...,i-1,i+1,...,n

要使得任意第k个人不拿与自己编号相同的帽子,这就相当于dp[n-2]的问题。

  1. 第i个人不选择第1顶帽子。则剩下的人(包括第i个人,因为他还么确定)的编号和帽子的编号
人:     2,3,4,...,i-1,i,i+1,...,n
帽子:   2,3,4,...,i-1,1,i+1,...,n

要使得任意第k个人不拿与自己编号相同的帽子(同时第i个人不能拿第一顶帽子),这就转化为了dp[n-1]的问题。

综上,加上考虑到第一个人选择第i顶帽子有n-1种选择,每种选择的后续分析都是一模一样的,故总的递推关系是:

dp[n] = (dp[n-1]+dp[n-2])*(n-1)