上一篇文章 [GATOR+HOJA=IDV*TW]寫了個小程式求得解答,但是在程式寫作過程中,最麻煩的是要先取得0-9 10個數字排列的所有可能性。根據排列組合的公式,這有10! (= 3628800)個。

但是是那些呢?如果用10 個for loop,是不切實際的,如果要排列的不是10個元素時,該如何?



試想,如果有兩個數(1, 2)要排序:

[1, 2] => (1,2) , (2,1)

當第三個數(3)加進來後:

[1,2,3] => (1,2) + 3 => (3,1,2) , (1,3,2), (1,2,3)

          (2,1) +3 => (3,2,1), (2,3,1), (2,1,3)

所以可以得出,每增加一個元素,就是將這增加的元素,插到原來所有可能排列的所有可能位置(前,中,.....後)

這也就是 http://gatorliu.googlepages.com/factor.pl 的Algorithm

此外在Perl實做上,全部利用array處理,在元素超過9個後,造成我系統crash,所以我改用字串處理。