題干
輸入一個字符串,打印出該字符串中字符的所有組合练俐。例如輸入字符串a(chǎn)bc袖迎,則它們的組合有a、b、c燕锥、ab辜贵、ac、bc归形、abc托慨。
解題思路
如果輸入n個字符,則求這n個字符的長度為m(1 =< m <= n
)的組合也是將字符分成兩部分暇榴,第一個字符和其余字符厚棵。如果組合包含第一個字符,則從剩余字符中找出m-1個字符蔼紧,如果組合不包含第一個字符婆硬,則從剩余字符中找出m個字符。
代碼實現(xiàn)
<?php
function combination($str)
{
if (empty($str)) {
return;
}
doCombination($str, mb_strlen($str), []);
}
function doCombination($str, $len, $arr)
{
if (empty($str) || $len == 0) {
if (!empty($arr)) {
echo implode('', $arr).PHP_EOL;
}
return;
}
array_push($arr, $str[0]);
doCombination(mb_substr($str, 1), $len - 1, $arr);
array_pop($arr);
doCombination(mb_substr($str, 1), $len, $arr);
}
combination('abcd');