输入一个矩阵,从外向里以顺时针的顺序依次打印出每个数字。例如:
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
$matrix = array();
$matrix = [[1,2,3],[4,5,6],[7,8,9]];
按照提议打印结果:1,2,3,6,9,8,7,4,5
可以使用转圈打印方案,即:
1、打印1,2,3
2、打印6,9
3、打印8,7
4、打印4
5、打印5
实现代码:
$matrix = [[1,2,3],[4,5,6],[7,8,9]];
function matrix($matrix){
$row = count($matrix);//行数
$col = count($matrix[0]);//列数
if($row==0 || $col==0) return $matrix;//没有则返回原数组
$result = array();//初始化数组
$left = 0; $right = $col-1;$top = 0;$botton = $row-1;
while($left<=$right && $top<=$botton){
//上边左到右 123
for($i = $left;$i<=$right;++$i){
array_push($result,$matrix[$top][$i]);
}
//右边上到下 69
for($i = $top + 1 ;$i <=$botton; ++$i){
array_push($result,$matrix[$i][$right]);
}
//底部右到左 行数不为0
if($top != $botton){
//列数-1-1 =个数,倒序把元素塞进数组 87
for($i =$right-1;$i>=$left ;--$i){
array_push($result,$matrix[$botton][$i]);
}
}
//左边从下到上 列数不为0
if($right != $left){
//行数-1-1 =个数,把元素塞进数组
for($i = $botton-1;$i>$top;--$i){
array_push($result,$matrix[$i][$left]);
}
}
//起点坐标+1,列数-1,行数-1
$left++;$right--;$top++;$botton--;
}
return $result;
}
$res=matrix($matrix);
echo '<pre>';
print_r( $res);
exit;