1. 程式人生 > >遞推: 給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數 要求下排每個數都是先前上排那十個數在下排出現的次數

遞推: 給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數 要求下排每個數都是先前上排那十個數在下排出現的次數

騰訊面試題:給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數   
要求下排每個數都是先前上排那十個數在下排出現的次數。   
上排的十個數如下:   

【0,1,2,3,4,5,6,7,8,9】

分析:上排數字為a0,a1,a2,...,an,則下排對應數字為b0,b1,b2,...,bn。a0,a1,a2,...an為0,1,2,3,...n的自然數序列。

從an下面應該對應的數字入手,an下面為bn,則表示b0,b1,b2,...,bn這n+1個數字鍾an出現了bn次,所以bn絕不可能大於N+1,因為一共才N+1個數,an可能在b0,b1,...bn這個n+1個數據中出現N+2或者N+3次。

如果an對應的bn為N+1,則b0,b1,b2...bn必須全部為an,即出現

012 34567 89

999 99999 910

顯然,這與題意不符合,0在下排中一次未出現,而0下面對應確實9.

如果an對應的bn為n時,b0,b1,...bn-1必須且僅有一個數自不是an,該數字是什麼也不討論,上排數字aX對應的是數字*,*!=an,即出現

012 34567 89

999 999*9 9 9

假設上排6對應的數字不是9。

那麼a0,a1,a2,ax-1,ax+1,ax+2,..an-1對應都是an,顯然,上排數字0,1,2,對應都是9,而下排數字根本不可能出現9個0,9個1,因為出現的話,下排最少要有18個位置來放置這18個數字,而下排一共才10個位置。

那麼一路假設an對應的為n-1,n-2...1。

用上面上排是0,1,2,...9做例子說明:

假設an對應數字是1,那麼意味b0,b1,...bn-1中有且只有一個數字是9,假設只有ax對應的下排數字是9,那麼這又意味ax要在下排出現9次,這樣下排至少需要1+1+9=11個位置(1個位置放bn=1,一個位置放ax下面對應的數字9,另外9個位置放數字ax),而下排一共才10個位置,所以an對應的數字只能是0.

那麼既然an只能是0,那麼這個問題可以縮小規模到上排數字是a0,a1,a2,...an-1這n個規模。

也就是上面是0,1,2,3,4,5,6,7,8這個規模,只不過與上面數字是0,1,2,3,4,5,6,7,8,9相比,數字0對應的下面的數字要小1(因為上排數字9對應的下排必定是0,所以下排0的個數要少一個)。

用同樣的思路來分析,假設an-1也就是8對應的下面數字是1,那麼0,1,2,。。。,7中僅有一個數字下面對應是8,假設數字6下面對應是8,那麼下排9個數字要出現8個數字6,這樣一來下排至少要1+1+8=10個位置(1個位置是an-1=8對應的下排數字1,一個位置是數字6對應的下排數字8,另外8個位置全部是數字6),這樣下來an-1=8對應的下排數字又只能是0.

問題又被縮小到0,1,2,3,。。。7這8個數字的規模。

。。。

一直縮小規模,直到縮小到0,1,2,這時作簡單分析知道上排數字是0,1,2只有3個數字的話下排是無解的,假設2對應的下排是0,這時0下面對應的至少是1,

012

1               0

那麼1下面填1,填1的話,那麼下排有2個1,那填2,填2的話,下排只有1個1。

所以最小規模是0,1,2,3,按照上面分析3下面必須填0,那麼0下面填1,1下面填1,那就意味下排出現了2個1(這樣1下面該填2),1下面填2,那麼2下面填1,這樣符合題目意思了。

012 3

121 0

按照0,1,2,3,4只是比0,1,2,3,4,5【a0,a1,a2,...an比a0,a1,a2,...an-1】多一個數據的規模,且是an對應的下排資料一定是0,那麼與a0,a1,a2,...an-1下排資料相比,這時a0=0對應的下排數字應該要加1(因為0的數量多了一個an對應的下排數字0),0對應的下排為x,則上排數字x下排對應的數字是1,下排其餘非0數字位作相應調整,調整不了則無解。

所以0,1,2,3,4對應的下排應該是

012 34

212 00


所以

012 345  無解

所以

012 3456

321 0100

所以

012 34567

所以

012 34567 8

521 00100   0無解

所以

012 34567 89

6      2      1       0      0      0      1     0       0      0        

所以

0 12345 678910

7      2      1       0      0      0      0    1       0      0        0