輸出字串的所有組合可能
阿新 • • 發佈:2020-08-12
題目
輸出一個字串所有可能的組合,如"abc",結果為['a', 'b', 'c', 'ab', 'ac', 'bc', 'abc'],不考慮字元順序,ab和ba輸出一種即可。
分析
可以採用遞迴演算法,要計算"abc"的結果,可以考慮先計算"ab"的結果,在"ab"的結果基礎上,再加入"c"
遞迴公式
f(abc) = f(ab) + f(ab)c + c
f(ab)c意思是把ab結果集中每個元素都新增c,最後在加入c本身,就是f(abc)的最終結果了
結束條件
當拆解到只有一個字元時,直接返回,比如['a']
function allStr($str) { if (strlen($str) == 0) return []; if (strlen($str) == 1) return [$str[0]]; $last = substr($str, -1); $subArr = allStr(substr($str, 0, -1)); $rs = $subArr; for ($i=0;$i<count($rs);$i++) { $rs[$i] = "{$rs[$i]}{$last}"; } array_push($rs, $last); return array_merge($subArr, $rs); } $a = 'abcd'; $result = allStr($a); print_r($result);