• LeetCode-数组-No48旋转图像


    题目:

            给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

    示例 1:

    • 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
    • 输出:[[7,4,1],[8,5,2],[9,6,3]]

    示例 2:

    • 输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
    • 输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]                                                        

    解答:

    分两步走: 1.对角线为轴翻转得到其转置矩阵  2.以中间竖轴翻转。

    1.     1  2  3      1  4  7      7  4  1
    2.     4  5  6  -->   2  5  8  -->   8  5  2  
    3.     7  8  9       3  6  9       9  6  3
    翻转分析:
    1. 对角线为轴翻转: ->  推论出:后[行][列] =后[列][行]
    1.      2: (0,1)  -> (1,0)
    2.      3: (0,2)  -> (2,0)
    3.      ...
    4.      6: (1,2)  -> (2,1)
    5.      ...
    2. 以中间竖轴翻转:->  推论出:后[行][列] =后[行][长度 - 1 -列]
    1.      7: (0,0) -> (0,2)
    2.      4: (0,1) -> (0,1)
    3.      1: (0,2) -> (0,0)
    4.      ...
    循环边界值分析: 
    1. 对角线双层循环控制: 
    1. 外层循环行,除第0行,每行都循环到 -> 推论出: for(int i = 1; i < nums.length ...
    2. 内层循环列, 即 for(int j = 0; j < i ...
    3. - 第1行,需要处理0
    4. - 第2行,需要处理0,1
     2. 中间竖轴双层循环控制:
    1. 外层循环行,每行都循环到 -> 推论出: for(int i = 0; i <= nums.length/2 ...
    2. 内层循环列,中间竖轴
    3. - 列偶数个,有两个中位数,需要处理第一个中位数之前的元素(包含第一个中位数)。 nums.length/2  6/2=3  (0,1,2)
    4. - 列奇数个,有一个中位数,需要处理中位数之前的元素(不包含中位数)。 但是nums.length/2  例如:7/2=3  (0,1,2) 包含中位数。为了覆盖偶数,奇数也可以出处理一位

    代码:

    1. private static int[][] method2(int[][] matrix) {
    2. for (int i = 1; i < matrix.length; i++) {
    3. for (int j = 0; j < i; j++) {
    4. int temp = matrix[i][j];
    5. matrix[i][j] = matrix[j][i];
    6. matrix[j][i] = temp;
    7. }
    8. }
    9. for (int i = 0; i < matrix.length; i++) {
    10. for (int j = 0; j <= matrix.length / 2; j++) {
    11. int temp = matrix[i][j];
    12. matrix[i][j] = matrix[i][matrix.length - 1 - j];
    13. matrix[i][matrix.length - 1 - j] = temp;
    14. }
    15. }
    16. return matrix;
    17. }

  • 相关阅读:
    Java亿级流量架构之网关设计思路
    ECMAScript 6 语法 1 —— 块作用域构造let 和 const
    运筹说 第72期 | 算法介绍之动态规划(二)
    KUKA机器人后台控制程序(SPS)介绍
    亚马逊短视频制作需要注意什么?
    2021年12月电子学会图形化三级编程题解析含答案:数星星
    使用3DMax制作一个象棋棋子
    Qt编程,事件过滤器、绘图
    AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.05.25-2024.05.31
    通俗易懂的MVCC
  • 原文地址:https://blog.csdn.net/huantai3334/article/details/140053997