48. Rotate Image
发布日期:2021-08-29 06:13:56 浏览次数:7 分类:技术文章

本文共 1469 字,大约阅读时间需要 4 分钟。

一、题目

  1、审题

  

  2、分析:

    给出一个二维数组代表的矩阵,求得矩阵顺时针旋转90度后的新矩阵。

 

二、解答

  1、思路:

    方法一、观察可知,原矩阵与新矩阵的对应关系如下:

        ①、原矩阵的列 == 新矩阵的行;

        ②、原矩阵的行 + 新矩阵的列 == 矩阵的最大行号

        故借助一个二维数组可以实现

class Solution {    public void rotate(int[][] matrix) {        int maxIndex = matrix.length-1;        int[][] newMatrix = new int[maxIndex+1][maxIndex+1];        for (int i = 0; i <= maxIndex; i++) {            for (int j = 0; j <= maxIndex; j++) {                newMatrix[j][maxIndex - i] = matrix[i][j];             }        }                for (int i = 0; i < newMatrix.length; i++) {            for (int j = 0; j < newMatrix.length; j++) {                matrix[i][j] = newMatrix[i][j];            }        }    }}

 

  方法二、不申请新数组,直接在原数组的基础上进行交换。

  ①、顺时针交换:

    a、将二维数组列元素进行旋转;

    b、将二维数组对称元素进行交换。

  

  ②、逆时针旋转:

    a、将行元素进行旋转;

    b、将二维数组对称元素进行交换。

public void rotate(int[][] matrix) {        int len = matrix.length;                for (int i = 0, j = len - 1; i < j; i++, j--) {            for (int k = 0; k < len; k++) {                int tmp = matrix[i][k];                matrix[i][k] = matrix[j][k];                matrix[j][k] = tmp;            }        }                for (int i = 0; i < len; i++) {            for (int j = i+1; j < len; j++) {    // 注意: j = i + 1 开始;                int tmp = matrix[i][j];                matrix[i][j] = matrix[j][i];                 matrix[j][i] = tmp;             }        }    }

 

转载于:https://www.cnblogs.com/skillking/p/9634300.html

转载地址:https://blog.csdn.net/weixin_33985507/article/details/94081451 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java API —— 网络编程
下一篇:15个学习习惯 受益终身(zz)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月02日 03时50分34秒