我正在創建一個函數,它將使用字符集返回給定字符串長度內的每個可能的字符串。基於字符集的固定長度的所有字符串組合
作爲一個例子, 「ABC」,和2的長度的字符集應允許9(3^2)獨特組合:
AA, AB, AC, BA, BB, BC, CA,CB , 立方厘米
(列表構造手動地)
什麼方法可被用於創建這樣的功能?
我正在創建一個函數,它將使用字符集返回給定字符串長度內的每個可能的字符串。基於字符集的固定長度的所有字符串組合
作爲一個例子, 「ABC」,和2的長度的字符集應允許9(3^2)獨特組合:
AA, AB, AC, BA, BB, BC, CA,CB , 立方厘米
(列表構造手動地)
什麼方法可被用於創建這樣的功能?
像往常一樣,有多種方法來解決你問什麼,這只是一種方式,每個字符使用一個計數器輸出字符串:
$c = "abc"; // charset
$l = 2; // string length
for($t='',$cl=strlen($c),$s=array_fill(0,$l,0),$i=pow($cl,$l);$a=0,$i--;) {
for($t&&$t.=', ';$a<$l;$t.=$c[$s[$a++]]);
for(;$a--&&++$s[$a]==$cl;$s[$a]=0);
};
echo $t; // the string you asked for.
AA,AB,AC,BA,BB ,bc,ca,cb,cc
一個主循環,一個循環用於構建字符串和一個循環用於向上計數。
我可以想象這應該與得到輸出字符串的每個位置的模數。
你好,我upvoted你的答案,因爲它是短暫的,非常適合我的需求。然而,它很短,我無法改變它,所以我把它變成一個函數,然後它返回一個字符串,而不是一次性的所有可能性。你可以幫我嗎?或指導我,所以我可以做到這一點?謝謝 – user3916429
你已經做去了解這一點,我們可以清楚地從你的榜樣的解決方案,請參閱:
AA,AB,AC,BA,BB,BC,CA,CB,CC
你在想什麼來提出這個解決方案?你必須保持幾件事情:
有什麼字符我應該從字符集開始?
因爲我正在構造輸出字符串,請問下一個 charset中的字符?
我可以從字符集中挑出多少個字符?
當我從字符集中挑選出所有允許的字符時,我該做什麼?
我已經用盡了charset方面的字符嗎?如果是,我完成了。
你可以把它轉換成代碼嗎?或者這個答案太可愛了?
這是功課還是面試問題?如果是,請相應標記。我們很樂意提供幫助,但請幫助我們理解您爲什麼問。謝謝。 –
@bryc可以跳過像ac和ca這樣的組合嗎?那是唯一的組合? – Mob
@hakre它不是排列的提問者尋求 – AakashM