Skip to content

Latest commit

 

History

History
94 lines (74 loc) · 2.61 KB

48.md

File metadata and controls

94 lines (74 loc) · 2.61 KB

✏️Leetcode之PHP版题目解析(48. Rotate Image)

2019-12-25 吴亲库里 库里的深夜食堂


✏️描述

旋转图像。二维矩阵表示一个图像。顺时针90度旋转图像。注意只能原地修改值,不能重新创建一个二维矩阵。


✏️题目实例

****

✏️题目分析

常规一种思路就是先转置二维矩阵,就像下面这样

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

然后再将每一行翻转一下即可。

✏️解法一

/**
     * @param Integer[][] $matrix
     * @return NULL
     */
    function rotate(&$matrix)
    {
        $n = count($matrix);
        for ($i = 0; $i < $n; $i++) {
            for ($j = $i; $j < $n; $j++) {
                $temp = $matrix[$j][$i];
                $matrix[$j][$i] = $matrix[$i][$j];
                $matrix[$i][$j] = $temp;
            }
        }

        for ($i = 0; $i < $n; $i++) {
            for ($j = 0; $j < $n / 2; $j++) {
                $temp = $matrix[$i][$j];
                $matrix[$i][$j] = $matrix[$i][$n - $j - 1];
                $matrix[$i][$n - $j - 1] = $temp;
            }
        }
        return $matrix;
    }

还有一种更秒的解法。你可以发现1最终到了3,3到了9,9到7,7到1,四个边角的移动,然后是向里缩进,继续里边的四个边角的交换。发现了这个规律,其实每次相当于四个位置值的交换。

✏️解法二

  
 /**
     * @param Integer[][] $matrix
     * @return NULL
     */
    function rotate(&$matrix)
{
        $n = count($matrix);
        for ($i = 0; $i < $n / 2; $i++) {
            for ($j = $i; $j < $n - $i - 1; $j++) {
                $temp = $matrix[$n - 1 - $j][$i];
                $matrix[$n - 1 - $j][$i] = $matrix[$n - 1 - $i][$n - 1 - $j];
                $matrix[$n - 1 - $i][$n - 1 - $j] = $matrix[$j][$n - 1 - $i];
                $matrix[$j][$n - 1 - $i] = $matrix[$i][$j];
                $matrix[$i][$j] = $temp;
            }
        }
        return $matrix;
    }  

联系