当前位置: 首页 > news >正文

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

 

转载于:https://www.cnblogs.com/taoshihan/p/9872264.html

相关文章:

  • Java集合-HashMap扰动函数
  • Django-jet自定义菜单
  • 解决org.apache.hadoop.hbase.MasterNotRunningException
  • Vue CLI 3开发中屏蔽烦人的EsLint错误
  • 搞定所有的跨域请求问题: jsonp CORS
  • 开源运维管理平台(ows) damo版本源码发布
  • 精彩回顾 | 阿里云APM城市技术行·深圳站
  • ballerina 学习 三十一 扩展开发(二)
  • ES7 之 Async/await 的使用(改进 Promise 链式操作)
  • LAMP+Postfix+Dovecot+Postfixadmin搭建邮件管理系统(三)
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • webpack 4.x一起学习(二)
  • String类的常用方法详解
  • web开发原则
  • 视频文件应该怎样进行无损压缩
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【mysql】环境安装、服务启动、密码设置
  • 4. 路由到控制器 - Laravel从零开始教程
  • Bytom交易说明(账户管理模式)
  • canvas 绘制双线技巧
  • CentOS7 安装JDK
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • go语言学习初探(一)
  • java取消线程实例
  • java中具有继承关系的类及其对象初始化顺序
  • JS数组方法汇总
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • react 代码优化(一) ——事件处理
  • REST架构的思考
  • Spring核心 Bean的高级装配
  • tab.js分享及浏览器兼容性问题汇总
  • ucore操作系统实验笔记 - 重新理解中断
  • vue-cli3搭建项目
  • vue-router的history模式发布配置
  • 服务器之间,相同帐号,实现免密钥登录
  • 如何胜任知名企业的商业数据分析师?
  • 仓管云——企业云erp功能有哪些?
  • 交换综合实验一
  • $().each和$.each的区别
  • %check_box% in rails :coditions={:has_many , :through}
  • (4)Elastix图像配准:3D图像
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)模仿学习-Action数据的模仿
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (转)四层和七层负载均衡的区别
  • (转载)OpenStack Hacker养成指南
  • .Net FrameWork总结
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET命名规范和开发约定
  • .NET正则基础之——正则委托