蛇形打印矩阵,时间复杂度O(n)

时间:2022-03-15 06:41:36

如图   输入4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
比如:输入n,则第一行输出1-n,接着转90度,纵向输出,当输入到该列有n个数时转向

function printN($N){
//一行一行的打印
for($j=0;$j<$N;$j++){
//遍历每行的元素
for($i=0;$i<$N;$i++){
//区分对角线以下(右下部分,不包含对角线)
if($i+1 +$j+1 > $N + 1){
//奇数行,分不同的方向
if( ($i+$j) % 2 == 1){
$len = $N-$i -1 + $N - $j - 1 ;

$sum = $N*$N - $len*($len+1)/2 ;
$value = $sum -($N -$len -2 -$j + $len+ 1 );
}
else{
$len =$N-$i -1 + $N - $j - 1 ;
$sum = $N*$N - $len*($len+1)/2;
$value = $sum + ($N -$len - 1 -$j );
}
}
else{
//偶数行
if(($i+$j) % 2 == 0){
$sum = ($i+$j+1)*($i+$j+1+1)/2;
$value = $sum - $j;
}
else{
$sum = ($i+$j+1)*($i+$j+1-1)/2;
$value = $sum + $j + 1;
}
}
echo $value;echo "\t";
}
echo "\n";
}
}