LeetCode题目-48

首页 编程分享 LEET_CODE 正文

leetCode 转载 编程分享 2020-11-20 22:18:11

简介 LeetCode题目-48


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


✏描述

旋转图像。二维矩阵表示一个图像。顺时针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;
    }  


转载链接:https://leetcode.cn/


Tags:


本篇评论 —— 揽流光,涤眉霜,清露烈酒一口话苍茫。


    声明:参照站内规则,不文明言论将会删除,谢谢合作。


      最新评论




ABOUT ME

Blogger:袅袅牧童 | Arkin

Ido:PHP攻城狮

WeChat:nnmutong

Email:nnmutong@icloud.com

标签云