我正在研究一种算法来获得像这样的排列
123
132
213
231
312
321
我正在使用嵌套的 foreach 循环来完成它。
for (..) {
for(..) {
for(..) {
echo $i . $j . $k . "<br />";
}
}
}
问题是嵌套循环的数量针对 3 点排列进行了优化。 我如何才能动态设置嵌套 for 循环的数量以生成 4 个字母或 5 个字母的排列?
最佳答案
是的,递归地做。
function permuteThis($items, $permutations = array()) {
if(!is_array($items))
$items = str_split($items);
$numItems = sizeof($items);
if($numItems > 0) {
$cnt = $numItems - 1;
for($i = $cnt; $i >= 0; --$i) {
$newItems = $items;
$newPerms = $permutations;
list($tmp) = array_splice($newItems, $i, 1);
array_unshift($newPerms, $tmp);
permuteThis($newItems, $newPerms);
}
} else {
echo join('', $permutations) . "\n";
}
}
$number = 123;
permuteThis($number);
关于php - 是否可以动态设置for循环嵌套的层级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529508/