2016-11-29 33 views
-5

在重新排列位數號碼1862下一個最大的號碼是2168下一個最高數

在重新排列位數號碼22405下一個最大的號碼是22450

什麼是尋找下一個最高數的算法?

+0

你說「下一個最高號碼」是什麼意思?你的意思是通過重新排列原始數字的小數位數可以得到的所有數字中的第二高嗎?通過「數學過程」,你是指某種計算機語言或其他東西的算法或代碼?我在Object Pascal(Delphi)中有這樣的代碼,並且很想將它翻譯成Python,但是你需要澄清你想要的東西。您還需要告訴我們您迄今爲止在這個問題上所做的工作,並顯示您所做的任何代碼。這不是一項家庭作業回答服務。 –

+1

[查找下一個給定字符串的更大排列的算法]的可能重複(http://stackoverflow.com/questions/1622532/algorithm-to-find-next-greater-permutation-of-a-given-string) –

+0

這就是['std :: next_permutation'](http://stackoverflow.com/a/16680391/995714)用於 –

回答

1

下面是一個算法的總結,它可以做你想做的事情。如果您想了解更多細節,代碼或算法正確性的證明,請向我們展示您迄今爲止所做的更多。

我們以1862爲例。從最右邊的數字向左掃描該數字的數字,直到找到連續的一對數字,其中左邊的數字小於右邊的數字。在這種情況下,這是18。我們把這個左邊數字稱爲「樞軸」位置(這裏是1)。您現在將重新排列以該數據透視開始的數字中的數字。用位於其右側任何位置的下一個更大的數字替換主鍵(在這種情況下爲2)。然後在該數字之後,將所有其他數字放在原點的右側(在這種情況下爲186),並按升序排列(此處爲168)。結果是您的答案2168

在您的其他示例22405中,您可以掃描並在05處停止。在這種情況下,您將0替換爲5,然後將其他數字(0)替換後按照升序排列。所以你離開224獨自一個,並最終22450

如果在您的反向掃描中,您沒有發現任何連續的一對數字,其中左邊的數字小於右邊的數字,那麼這些數字沒有更大的數字。

有一個技巧可以按照遞增的順序加快數字的位置,但我會把它留給你。

相關問題