专栏首页陶士涵的菜地[PHP] 算法-顺时针打印矩阵的PHP实现

[PHP] 算法-顺时针打印矩阵的PHP实现

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);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [PHP]算法-最长公共子串的PHP实现

    陶士涵
  • [PHP] foreach循环的引用赋值可能导致的问题

    foreach($arr as &$value) 1.引用赋值符号&,是每次循环的时候,把当前元素变成地址,$value变量就是对应元素的地址,循环结束$val...

    陶士涵
  • [android] 手机卫士黑名单功能(ListView优化)

    上一篇记录了使用ListView展示出来了100条数据,当慢慢拖动的时候,不会有问题,但是当拖动很快的时候,应用会报anr错误

    陶士涵
  • Java基础常见英语词汇

    Java基础常见英语词汇(共70个) OO:object-oriented ,面向对象

    MonroeCode
  • Java基础常见英语词汇

    Java基础常见英语词汇(共70个) OO:object-oriented ,面向对象 OOP: object-oriented programming,...

    MonroeCode
  • 计算机视觉 OpenCV Android | 基本特征检测 之 模板匹配

    则运行接下来的demo代码,检测结果将如下:(截图中蓝色箭头所指的红色方框即为程序所匹配并绘制的)

    凌川江雪
  • opencv学习笔记 高斯模糊

    高斯平滑函数GaussianBlur():定义:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, ...

    用户2965768
  • IM群聊消息究竟是存1份(即扩散读)还是存多份(即扩散写)?

    上一篇文章《IM群聊消息的已读回执功能该怎么实现?》是说,“很容易想到,是存一份”,被网友们骂了,大家争论的很激烈(见下图)。

    JackJiang
  • Spring【AOP模块】就这么简单

    到目前为止,已经简单学习了Spring的Core模块….于是我们就开启了Spring的AOP模块了…在讲解AOP模块之前,首先我们来讲解一下cglib代理、以及...

    乔戈里
  • Spring【AOP模块】就这么简单

    前言 到目前为止,已经简单学习了Spring的Core模块….于是我们就开启了Spring的AOP模块了…在讲解AOP模块之前,首先我们来讲解一下cglib代理...

    Java3y

扫码关注云+社区

领取腾讯云代金券