基于这个问题
我创建了一个 PHP 算法,可以创建固定长度的字符组合(基本上是对 Java-answer 的重写)
private function getCombination($length, $input) {
$result = array();
if ($length == 0) {
return $result;
}
$first = substr($input, 0, $length);
$result[] = $first;
if (strlen($input) == $length) {
return $result;
}
$tails = $this->getCombination($length - 1, substr($input, 1));
foreach ($tails as $tail) {
$tmp = substr($input, 0, 1) . $tail;
if (!in_array($tmp, $result)) {
$result[] = $tmp;
}
}
return array_merge($result, $this->getCombination($length, substr($input, 1)));
}
对于另一个问题,创建较大集合的固定长度非重复排列,我得到了一个(出色的)算法,它可以使排列可索引,通过提供一个“键”有效地使它们可寻址,当给定时,它总是会产生完全相同的排列相同的字符集和相同的长度。
好吧,现在我基本上需要相同的组合,但与我的其他问题中的排列相反。
上面的算法可以用同样的方式修改吗?意思是创建一个类似的函数
public function getCombinationByIndex($length, $index);
这将返回使用算法创建的千种可能组合中的一种,而无需事先创建它们?