你可以爲這個問題寫一個簡單的遞歸算法。
該算法的思想是,你可以看看二進制數,並看到0
意味着字符將保持不變,並且1
意味着它將變成星號。你爲每個字符做了這個,因爲你有一個4個字符的長字,你得到了2*2*2*2 = 16
排列。
該算法檢查單詞中的字符,併爲每個字符嘗試生成它作爲普通字符和星號的排列。結果是當每個字符是自己的或者用星號標記時,所有help
這個詞的排列。
function asterisk_permutations($str, &$result=array(), $i=0) {
if ($i >= strlen($str)) {
$result[] = $str;
return;
}
asterisk_permutations($str, $result, $i+1);
asterisk_permutations(substr_replace($str, '*', $i, 1), $result, $i+1);
}
asterisk_permutations("help", $result);
var_dump($result);
,輸出是:
array(16) {
[0]=> string(4) "help"
[1]=> string(4) "hel*"
[2]=> string(4) "he*p"
[3]=> string(4) "he**"
[4]=> string(4) "h*lp"
[5]=> string(4) "h*l*"
[6]=> string(4) "h**p"
[7]=> string(4) "h***"
[8]=> string(4) "*elp"
[9]=> string(4) "*el*"
[10]=> string(4) "*e*p"
[11]=> string(4) "*e**"
[12]=> string(4) "**lp"
[13]=> string(4) "**l*"
[14]=> string(4) "***p"
[15]=> string(4) "****"
}
您解決這些類型的用鉛筆和一張紙最好的問題。 – hakre