1. 程式人生 > >[PHP] 算法-順時針打印矩陣的PHP實現

[PHP] 算法-順時針打印矩陣的PHP實現

clas int amp i+1 code div 就是 一個 bsp

1.行數和列數取出來row,col,圈數就是 (較小值-1)/2+1
2.外層循環控制圈數,內層四個for循環,i
3.第一個for循環,從左到右,j=i;j<col-i;j++;j<; arr[i][j]
4.第二個for循環,從上到下,k=i+1;k<row-i;k++; arr[k][col-1-i]
5.第三個循環,從右到左,m=col-2-i;m>=i&&row-1-i!=i;m--   arr[row-1-i][m]//row-1-i!=i單行的時候只打印一次
6.第四個循環,從下到上,n=row-2-i;n>=i&&col-1-i!=i;n--  arr[n][i]
<?php
$arr=array();
$flag=0;
for($i=0;$i<2;$i++){
        $flag=$i*2;
        for($j=0;$j<2;$j++){
                $flag++;
                $arr[$i][]=$flag;
        }   
}
var_dump($arr);
//順時針打印矩陣
function printMatrix($arr){
        $res=array();
        $row=count($arr);
        $col=count
($arr[0]); $circle=intval((($row>$col ? $col : $row)-1)/2+1); for($i=0;$i<$circle;$i++){ //轉圈開始 //從左到右 for($j=$i;$j<=$col-1;$j++){ $t=$arr[$i][$j]; if(in_array($t,$res)) continue;
$res[]=$t; } //從上到下 for($k=$i+1;$k<$row-$i;$k++){ $t=$arr[$k][$col-$i-1]; if(in_array($t,$res)) continue; $res[]=$t; } //從右到左 for($m=$col-$i-2;$m>=$i;$m--){ $t=$arr[$row-$i-1][$m]; if(in_array($t,$res)) continue; $res[]=$t; } //從下到上 for($n=$row-$i-2;$n>$i;$n--){ $t=$arr[$n][$i]; if(in_array($t,$res)) continue; $res[]=$t; } } return $res; } $res=printMatrix($arr);

[PHP] 算法-順時針打印矩陣的PHP實現