今天群里发了一道他去面试遇到的算法题,PHP的,矩阵的螺旋输出
题目:
例:
1 2 3
4 5 6
7 8 9
上面的这种矩阵,输出为 1 2 3 6 9 8 7 4 5
配个图看的更明白些
<?
function luoxuan($m,$start=1,$n=0){ //$one 初始值;$n 当前第几圈
$test=$m%2;
if($test){ //有余数
$q=($m-1)/2; //总圈数
$last=($m*$m+1)/2;
}else{
$q=$m/2; //总圈数
$last=0;
}
if($n>=$q){ //如果当前圈数大于总圈数 则完成。
if($last)echo $last;
return false;
}
$test=$start;
for($i=$start;$i<$test+$m-1-$n*2;$i++){
echo $i;
}
echo '<br>';
$test=$i;
for($i;$i<=$m*($m-1-$n);$i=$i+$m){
echo $i;
}
echo '<br>';
$test=$i;
for($i;$i>$test-$m+1+$n*2;$i--){
echo $i;
}
echo '<br>';
$test=$i;
for($i;$i>$test-$m*($m-1-$n*2);$i=$i-$m){
echo $i;
}
echo '<br>';
$i=$i+$m+1;
luoxuan($m,$i,$n=$n+1);
}
luoxuan($m);
思路:
例子:
1 2 3
4 5 6
7 8 9
3x3的矩阵 先走 1-->2 再 3->6 再 9->8 再 7->4 至此,第一圈走完 每圈走四步(上右下左) 每步走m-1个数 代码里的四个for循环分别代表这上右下左四步 - &n*2为 第二圈,第三圈。。需要走的步数,因为随着圈数的增加,里面的小圈越来越小,数字越来越少,就像我们玩贪食蛇把自己围起来钻自己里面一样