下面是我的代码来获取所有可能性:
$seq[1] = 'd';
$seq[2] = 'f';
$seq[3] = 'w';
$seq[4] = 's';
for($i = 1; $i < 5; $i++)
{
$s['length_1'][] = $seq[$i];
$c1++;
for($i2 = $i+1; $i2 < 5; $i2++)
{
$s['length_2'][] = $seq[$i].$seq[$i2];
$last = $seq[$i].$seq[$i2];
$c2++;
for($i3 = $i2+1; $i3 < 5; $i3++)
{
$s['length_3'][] = $last.$seq[$i3];
$last = $last.$seq[$i3];
$c3++;
for($i4 = $i3+1; $i4 < 5; $i4++)
{
$s['length_4'][] = $last.$seq[$i4];
$c4++;
}
}
}
}
for($i = 0; $i < $c1; $i++)
echo $s['length_1'][$i].'<br>';
for($i = 0; $i < $c2; $i++)
echo $s['length_2'][$i].'<br>';
for($i = 0; $i < $c3; $i++)
echo $s['length_3'][$i].'<br>';
for($i = 0; $i < $c4; $i++)
echo $s['length_4'][$i].'<br>';
但是如果我想添加更多,那么我将不得不添加更多的循环。那么,我怎么能用递归做到这一点呢?我尝试,我尝试,但我真的不能做到这一点。请帮助和后的例子尽可能简单。
谢谢你。
6条答案
按热度按时间5cnsuln71#
这里有一个算法
我知道这在任何方面都不是有效的,但是在小套中使用应该不是问题
第一基本参数是包含在生成组合时要考虑的元素的数组。
为了简化使用和输出:
输出为
要列出一个数组的所有子集,使用此组合算法只需执行
输出为
rn0zuynd2#
下面是一个简单的算法:从1迭代到2count(array)-1。在每次迭代中,如果循环计数器的二进制表示中的第j位等于1,则在组合中包含第j个元素。
由于PHP需要能够将2count(array)作为整数计算,因此不能超过
PHP_INT_MAX
。在64位PHP安装中,数组不能超过62个元素,因为262小于PHP_INT_MAX
,而263大于PHP_INT_MAX
。EDIT:计算所有可能的组合,而不是排列(例如,'abc' = 'cba')。它是通过用二进制表示原始数组,然后从0“向上计数”到整个数组的二进制表示来实现的,有效地构建了一个包含所有可能的唯一组合的列表。
bvjveswy3#
这就是:
输出:
同样,read this;
44u64gxh4#
您可以执行以下操作:
下面是一个例子:
这将生成以下数组:
简要说明:
对于每个0 ≤ i〈n 的 i,得到所有可能长度为0〈l ≤ n - i 的子数组 arr [i,i+ l]。
3j86kqsm5#
下面是打印所有可能的字符组合的函数:
tsm1rwdh6#
下面是在codeigniter/php中执行此操作另一种方法。