字典序算法(換位數)

給定一個順序的數 一般是 逆序最大 順序最小。 

比如 給定一個12354  我們找到離它最近的換位數。爲了更接近原數,我們需要保持高位不變,低位在最小範圍內變換順序。 那麼究竟需要變換多少位呢? 這取決於當前數的逆序區域。 

 

12354的逆序區域是最後兩位,對於這兩位來說,此時已經是最大的組合。所以我們要想最接近原數,又比原數大,就必須從倒數第三位開始改變。 

比如此時 我們需要改變的是3。那麼3和誰變換位置呢,我們需要從逆序中選擇剛好大於3的數字和3進行交換。 

這時倒數第三位已經確定,而前兩位不變,最後兩位仍然是逆序。這時我們需要把後兩位轉變回順序,以此來保證在第三位是4確定的情況下後兩位儘可能小。 

總結後分爲三個步驟: 

1.從後向前查看逆序區域,找到逆序區域的前一位,也就是數字置換的邊界。 

2.把逆序區域的前一位和逆序區域中剛剛大於它的數字交換 

3.把原來的逆序轉變爲順序。 

例題: 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章