1. 程式人生 > >面試題29:順時針打印矩陣

面試題29:順時針打印矩陣

tps inter while else UNC count type rac tro

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

面試題29:順時針打印矩陣