此代码将执行您想要的操作,只需 call 和 patternGenerator 函数,您的示例中需要的不同数字的数量是 3 (0,1,2)。
此代码中的想法是使用两个for loops,一个从最小数字开始到最大数字,另一个从最大数字减少到最小数字开始。
例如:
如果min = 0 和max = 5
第一个 loop 将打印 0,1,2,3,4,5
第二个将打印 4,3,2,1,0
就是这样。
起初,我创建了一个仅在名为 rowGenerator 的行上创建的函数,它将 $min 和 $max 作为 parameters 并打印一行
因此,如果我们想打印这样的一行:|0|1|0|,那么我们将使用min = 0 和max = 1 调用此函数,并且
如果我们想打印这样的一行:|1|2|1|,那么我们将使用min = 1 和max = 2 调用它。
function rowGenerator($min, $max)
{
echo '<tr>';
for($i = $min; $i<=$max;$i++)
echo '<td>'.$i.'</td>';
for($i = $max-1; $i>=$min;$i--)
echo '<td>'.$i.'</td>';
echo '</tr>';
}
现在,我们可以独立打印每一行。现在我们想要打印整个表格,如果我们查看我们为 rowGenerator 函数所做的调用,它将如下所示:
(min = 0, max = 1),
(min = 1, max = 2) 和
(min = 0,max = 1)。
最小值为 (0,1,0)。
是的,这又是相同的模式。那么我们又需要两个loops,一个从0开始并增加数量直到达到1,另一个从0循环到0。
这就是patternGenerator 函数中发生的事情。当您使用不同数字的数量调用它时,function 只需获取在您的情况下始终为 0 的 min 和 max。
function patternGenerator($numberOfDistinct )
{
echo "<table border =\"1\" style='border-collapse: collapse'>";
$min = 0;
$max = $numberOfDistinct - 2;
for($i = $min;$i<=$max; $i++)
{
rowGenerator($i,$i+1);
}
for($i = $max-1;$i>=$min;$i--)
{
rowGenerator($i,$i+1);
}
echo '</table>';
}
这是调用patternGenerator(3)的输出:
调用patternGenerator(5)的输出: