获取特定数字的所有变体特定长度和特定最小值和最大值?

Get all variations of certain numbers certain length and certain min&max values?

有趣,但我真的被这个可能很简单的任务困住了。

我需要的很简单

11111
11112
11121
11211 

等等。

这就是我到目前为止所做的(但当然不正确)

 $patterns=array_fill(0,5,'1'); //'1' is a minimal digit (but it can be higher)
 $cnt=0;
 $maxV=3; //max digit (can be any)
 $inc='Y';
 while($cnt++<100){
 for ($i = count($patterns)-1; $i>0; $i--){
 If($patterns[$i]<$maxV && $inc){$patterns[$i]++; $inc='';}
 If($patterns[$i]==$maxV){$patterns[$i]=1; $inc='Y';}
 }
 echo implode($patterns),'<br>';
 If($i==0){$inc='Y';}

 }



 the result is 

 112
 121
 122
 111
 112
 121
 122
 111
 112
 121
 122
 111

不是我需要的

重要的是我需要为结果数字设置长度以及最小值和最大值。

有什么建议吗?

我可能是错的,但我看到它看起来有效 ))

$patternlen=8;
$maxV=3;
$patternsMap=array_fill(0,$patternlen,'1');
$cnt=0;
$inc='Y';
while($cnt++<100000){
$inc='Y';
for($i = count($patternsMap)-1; $i>=0; $i--){
If($inc){
$patternsMap[$i]++; $inc='';
If($patternsMap[$i]==$maxV){$patternsMap[$i]=1; $inc='Y';}
}
}

echo $cnt,'. ',implode($patternsMap),' ',array_sum($patternsMap),'<BR>';

If($patternlen*$maxV-$patternlen<=array_sum($patternsMap)){break;}

}

您可以实现一个递增最后一位数字的里程表。当数字换行时,下一个数字会递增,直到您达到初始状态,即直到要换行的数字不超出您的模式大小的范围:

function echo_combo($size, $base)
{
    $pattern = array_fill(0, $size, 0);
    $ix = 0;

    while ($ix < $size) {
        $i = $size;

        while ($i--) {
            echo $pattern[$i] + 1;
        }
        echo "<br />";

        $pattern[$ix]++;
        while ($pattern[$ix] == $base) {
            $pattern[$ix] = 0;
            $ix++;
            if ($ix == $size) return;
            $pattern[$ix]++;
        }
        $ix = 0;
    }
}

echo_combo(5, 2);

(我不是 PHP 人,所以代码可能看起来不太 php-ish。抱歉。)

您的最后一个示例可能有效。除了第一个结果 1111111。它做了太多的工作。您正在为每个增量遍历整个数组。 array_sum 也将遍历数组。

一个使用递归的更简单的例子:

function printPattern($len, $min, $max){
    printPatternRec($len, $min, $max, array(), 0);
}
function printPatternRec($len, $min, $max, $pattern, $cur){
    if($cur==$len){
        echo implode($pattern),'<br>';
        return;
    }
    for($val=$min;$val<$max;$val++){
        $pattern[$cur]=$val;
        printPatternRec($len, $min, $max, $pattern, $cur+1);
    }
}