## 【24】詞典順序lexicographic order
一個排列就是物體按一定的順序擺放。例如,3124是數位1, 2, 3, 4的一種排列。如果所有排列都按照數位順序或字母順序排列的話,我們就稱之為詞典順序lexicographic order。0, 1, 2的所有詞典順序排列是:012 021 102 120 201 210。那麼0, 1, 2, 3, 4, 5, 6, 7, 8, 9的***第100萬個詞典順序是……?***
數學分析:
10!=3628800
9!=362880
8!=40320
7!=5040
6!=720
5!=120
4!=24
3!=6
2!=2
第100萬個數,介於9!和10!之間,9!*2<100萬<9!*3
所以0字頭和1字頭的數會用完,答案必定是2字頭
100萬-362880*2=274240
274240÷40320=6餘32320,第2個字用掉6輪(013456),下一個7,答案必定27開頭
32320÷5040=6餘2080,第三個字用掉6輪(013456),下一個8,答案必定278開頭
2080÷720=2餘640,第四個字用掉2輪(0,1),下一個3,答案必定2783開頭
640÷120=5餘40,第五個字用掉5輪(0,1,4,5,6),下一個9,答案必定27839開頭
40÷24=1餘16,第六個字用掉1輪(0),下一個1,答案必定278391開頭
16÷6=2餘4,第七個字用掉2輪(0,4),下一個5,答案必定2783915開頭
4÷2=2餘0,第八個字用掉2輪(0,4),下一個6,答案必定的2輪的4字最後一個
***2783915046***、2783915064、2783915406、2783915460、2783915604、、2783915640
以上是數學課的解法
### python支援的排列組合有下面幾種
from itertools import combinations # 組合
from itertools import combinations_with_replacement # 組合(包含自身)
from itertools import product # 笛卡爾積
from itertools import permutations # 排列
c5 = list(permutations([1,2,3,4,5], 5))
print(c5)
c3 = list(permutations([0,1,2],3))
print(c3)
但是你要怎樣停在中某一個?
試試看下面這個遞迴的方法

既然能夠print印出每一個,當然就可以數到你指定的那個啦!
不過請注意,在函(式)數裡面的變數可是區域變數喔,記得要宣告global才能和外面的變數溝通喔!