下一个全排列
實現(xiàn)獲取下一個排列的函數(shù),算法需要將給定數(shù)字序列重新排列成字典序中下一個更大的排列。
如果不存在下一個更大的排列,則將數(shù)字重新排列成最小的排列(即升序排列)。
必須原地修改,只允許使用額外常數(shù)空間。
以下是一些例子,輸入位于左側(cè)列,其相應(yīng)輸出位于右側(cè)列。
1,2,3?→?1,3,2
3,2,1?→?1,2,3
1,1,5?→?1,5,1
思路,從右邊找出第一個非遞增序列,然后交換成遞增序列,再去取前面下標(biāo)值前一個數(shù)字交換就好了。
舉例子:1254321
找出后面的遞增序列,54321,顯然這是一個最大的排列,所以下一個排列應(yīng)當(dāng)從這里開始,下一個排列應(yīng)該變成最小的12345,然后找5前面的第一個數(shù)字,2,從12345中找到第一個比2大的數(shù)字3
交換3和2得出下一個排列1312245
?
轉(zhuǎn)載于:https://www.cnblogs.com/zzas0/p/10533270.html
總結(jié)
- 上一篇: 云栖专辑 | 阿里开发者们的第8个感悟:
- 下一篇: 深入浅出聊聊Kubernetes存储(二