Leetcode基础刷题之PHP解析(59. Spiral Matrix II)


2019-7-31 星期三 开始吧

上一题链接Leetcode基础刷题之PHP解析(54. Spiral Matrix)

c40aac169b9d79a133e1eef63442b5a3.png

题目描述

这道题是54的第二个版本,其实也就是类似相反的操作,给定一个整数,从1到n的平方输出旋转式的顺序。


题目分析

搞清楚返回的顺序,对应每一个点进行填充。


代码实现

    /**
     * @param Integer $n
     * @return Integer[][]
     */
    function generateMatrix($n) {
        $up=0;
        $down=$n-1;
        $left=0;
        $right=$n-1;
        $start=1;
        $res=[];
        while($left<=$right){
            for($i=$left;$i<=$right;++$i){
                $res[$up][$i]=$start++;
            }
            $up++;
            for($i=$up;$i<=$down;++$i){
                $res[$i][$right]=$start++;
            }
            $right--;
            for($i=$right;$i>=$left;--$i){
                $res[$down][$i]=$start++;
            }
            $down--;
            for($i=$down;$i>=$up;--$i){
                $res[$i][$left]=$start++;
            }

            $left++;
        }
        foreach($res as $key=>$val){
            ksort($res[$key]);
        }
        return $res;
    }


可以看到最后我还给每一个一维数组进行ksort排序,这是为什么。打印一下返回值。看一下没排序之前的。

array(3) {
  [0]=>
  array(3) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    int(3)
  }
  [1]=>
  array(3) {
    [2]=>
    int(4)
    [0]=>
    int(8)
    [1]=>
    int(9)
  }
  [2]=>
  array(3) {
    [2]=>
    int(5)
    [1]=>
    int(6)
    [0]=>
    int(7)
  }

}


正确的结果

[[1,2,3],[8,9,4],[7,6,5]]

乍一看没问题啊,下标都对的上啊,但是当我提交的时候

31daab73312a0659504fafd3b3775fa1.png
很奇怪为什么不是按照下标顺序开始排?所以我多出了这一步,难道是我脑子短路了?????????


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: Leetcode PHP题解--D111 492. Construct the Rectangle

>> 下一篇: Leetcode PHP题解--D112 181. Employees Earning More Than Their Managers