## 【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) 但是你要怎樣停在中某一個? 試試看下面這個遞迴的方法 ![](https://i.imgur.com/aNhOn9W.png) 既然能夠print印出每一個,當然就可以數到你指定的那個啦! 不過請注意,在函(式)數裡面的變數可是區域變數喔,記得要宣告global才能和外面的變數溝通喔!