zoukankan      html  css  js  c++  java
  • 面试题29:顺时针打印矩阵

    NowCoder

    <?php
    header("content-type:text/html;charset=utf-8");
    /*
     * 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. P161
     */
    
    function printMatrix($matrix)
    {
        $leftRow = 0;
        $leftCol = 0;
        $rightRow = count($matrix) - 1;
        $rightCol = count($matrix[0]) - 1;
        if($matrix == null){
            return null;
        }
    
        $arr = [];
        $array = [];
        while ($leftRow <= $rightRow && $leftCol <= $rightCol){
            $arr[] = printEdge($matrix,$leftRow++,$leftCol++,$rightRow--,$rightCol--); //得到一个二维数组,注意数组的添加方式
        }
        foreach ($arr as $value){
            foreach ($value as $val){
                $array[] = $val;
            }
    
        }
        return $array;
    }
    
    function printEdge($matrix,$leftRow,$leftCol,$rightRow,$rightCol){
        $arr = [];
        //注意分支if-elseif-else的添加,它们三个有重叠
        if($leftRow == $rightRow){         //如果只有一行,必定是从左至右打印
            for($i = $leftCol; $i<=$rightCol;$i ++ ){
             //   echo $matrix[$leftRow][$i]." ";
            //    echo "=====";
                $arr[] = $matrix[$leftRow][$i];
            }
        }
        elseif($leftCol == $rightCol){  //如果只有一列,必定是从上至下打印
            for($i = $leftRow; $i<=$rightRow;$i ++ ){
              //  echo $matrix[$i][$leftCol]." ";
                $arr[] = $matrix[$i][$leftCol];
            }
        }
        else{
            for($i = $leftCol;$i < $rightCol;$i++){
                //   echo $matrix[$leftRow][$i]." ";
                $arr[] = $matrix[$leftRow][$i];
            }
            for($i = $leftRow;$i < $rightRow;$i++){
                //    echo $matrix[$i][$rightCol]." ";
    
                $arr[] = $matrix[$i][$rightCol];
            }
            for($i = $rightCol;$i > $leftCol;$i--){
                //    echo $matrix[$rightRow][$i]." ";
                $arr[] = $matrix[$rightRow][$i];
            }
            for($i = $rightRow;$i > $leftRow;$i--){
                //  echo $matrix[$i][$leftCol]." ";
                $arr[] = $matrix[$i][$leftCol];
            }
        }
    
        return $arr;
    }
    
    //$matrix = array(array(1,2,3,4),array(5,6,7,8),array(9,10,11,12),array(13,14,15,16),array(17,18,19,20));
    $matrix = [[1,2,3,4,5]];
    print_r(printMatrix($matrix));
  • 相关阅读:
    洛谷 P1508 Likecloud-吃、吃、吃
    Codevs 1158 尼克的任务
    2017.10.6 国庆清北 D6T2 同余方程组
    2017.10.6 国庆清北 D6T1 排序
    2017.10.3 国庆清北 D3T3 解迷游戏
    2017.10.3 国庆清北 D3T2 公交车
    2017.10.3 国庆清北 D3T1 括号序列
    2017.10.4 国庆清北 D4T1 财富
    2017.10.7 国庆清北 D7T2 第k大区间
    2017.10.7 国庆清北 D7T1 计数
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10198340.html
Copyright © 2011-2022 走看看