LeetCode第48题旋转图像

继续打卡算法题,今天学习的是LeetCode第48题旋转图像,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

分析一波题目

本题需要将二维数组90度旋转,通过分析例子可以得到规则,从最外层(0,0)元素开始由外向里顺时针遍历,确定好第一个元素旋转90度之后的位置后,其实(0,0)后面的其他元素也确定了。 如果我们使用一个单独的二维数组来存储新的值,那么这个题就很好解了。

本题要求必须 原地 旋转,因此需要想想有没有其他办法。

有一个比较灵活的办法,使用两次翻转,首先是上下水平翻转,第二是对角线对称翻转,非常巧妙的解决此题。

本题解题技巧

本题如果不需要在本地旋转,解题思路很容易想到,但是要求不使用另外的数组,需要观察每个元素旋转之后的位置关系。本题理解水平翻转和对角线对称翻转的思想很关键。

编码解决

java 复制代码
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        // 水平翻转
        for (int i = 0; i < n / 2; ++i) {
            for (int j = 0; j < n; ++j) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n - i - 1][j];
                matrix[n - i - 1][j] = temp;
            }
        }
        // 主对角线翻转
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < i; ++j) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }

    }
}

总结

哈哈,如果是第一次看到这类题目,这题还是有点难度的,我们见过了,以后有类似的题目,可以想下有没有这种有技巧的方式解决。观察转换前后的位置规律非常重要。

相关推荐
Oneslide42 分钟前
Ubuntu 26.04 完整安装 Fcitx5 中文拼音输入法指南(适配默认Wayland)
后端
huangdong_1 小时前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
掘金码甲哥2 小时前
3min手搓一个帮助文档站,很合理吧!
后端
JAVA面经实录9172 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
JAVA面经实录9172 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第117题】【并发篇】第17题:线程有几种状态,之间如何转换?
java·开发语言·面试
开源Z3 小时前
LeetCode 42 · 接雨水:从暴力到双指针的三步优化
算法·leetcode
旖-旎3 小时前
《LeetCode 695 岛屿的最大面积 FloodFill DFS 解法》
c++·算法·力扣·深度优先遍历·floodfill
syagain_zsx4 小时前
STL 之 vector 讲练结合
c++·算法
牛油果子哥q4 小时前
STL set与map底层精讲,红黑树适配原理、有序去重特性、迭代器遍历、API实战与面试核心考点全解
开发语言·数据结构·c++·面试