天天看點

關于字典序的若幹問題

1.六個數裡取所有三個數的全排列按字典序輸出

  法一:我記得比賽時我用的是二維數組,每一維先排序,竟然立馬水過了,後來我想要是數多了就很麻煩,于是有了下面的方法。

  法二:

2.求字典序的第k的排列

  參見POJ 1037(不隻是簡單地求第幾個排列),下面的方法都逾時(應該是WA)了;參加黑書P257,也可以求1開頭的共幾個排列,這樣逼近,不過若是位數較多,數組開不了

  法一:

3.求上一個和下一個排列

  一.上一個排列

    普通算法沒找到,可以直接prev_permutation()

  二.下一個排列

    a.普通算法

      從最後一位 找到第一個非遞減的位數,假設最末尾連續的遞減位數為k;例如12354   54是遞減的 是以找到3 k=2;然後将這一位與最後一位互換 例如12354 換成12453;那後k位是降序序的 ;是以将最後k位改成升序即可。

    b.

繼續閱讀