• 48.Rotate Image


    题目链接

    题目大意:顺时针一次旋转矩阵。例子如下:

    法一:新开辟一个数组空间,将每一行的数值赋值给每一列。代码如下(耗时3ms):

     1     public void rotate(int[][] matrix) {
     2         int[][] res = new int[matrix.length][matrix.length];
     3         int k = matrix.length - 1;
     4         //逐行换到逐列
     5         for(int i = 0; i < matrix.length; i++) {
     6             for(int j = 0; j < matrix.length; j++) {
     7                 res[j][k] = matrix[i][j];
     8             }
     9             k--;
    10         }
    11         //将数值复制回去
    12         for(int i = 0; i < matrix.length; i++) {
    13             for(int j = 0; j < matrix.length; j++) {
    14                 matrix[i][j] = res[i][j];
    15             }
    16         }
    17     }
    View Code

    法二(借鉴):每一个数换到一个位置,那个位置上的数就会换到其他位置,最后一个数会换到刚开始的那个位置,比如1->3->9->7->1。

    所以根据这个换位规律,得到如下代码。代码如下(耗时2ms):

     1     public void rotate(int[][] matrix) {
     2         int n = matrix.length;
     3         //逐行
     4         for(int i = 0; i < n / 2; i++) {
     5             //每行中需要旋转的数值
     6             for(int j = i; j < n - i - 1; j++) {
     7                 int tmp = matrix[i][j];
     8                 matrix[i][j] = matrix[n - j - 1][i];
     9                 matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
    10                 matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
    11                 matrix[j][n - i - 1] = tmp;
    12             }
    13         }
    14     }
    View Code

    法三(借鉴):先根据对角线翻转 一次,然后在根据x轴中线翻转一次,可以得到最终结果。

    根据这个规律,得到如下代码。代码如下(耗时3ms):

     1     public void rotate(int[][] matrix) {
     2         int n = matrix.length;
     3         //沿对角线翻转
     4         for(int i = 0; i < n - 1; i++) {
     5             for(int j = 0; j < n - i; j++) {
     6                 int tmp = matrix[i][j];
     7                 matrix[i][j] = matrix[n - j - 1][n - i - 1];
     8                 matrix[n - j - 1][n - i - 1] = tmp;
     9             }
    10         }
    11         //沿x轴中线翻转
    12         for(int i = 0; i < n / 2; i++) {
    13             for(int j = 0; j < n; j++) {
    14                 int tmp = matrix[i][j];
    15                 matrix[i][j] = matrix[n - i - 1][j];
    16                 matrix[n - i - 1][j] = tmp;
    17             }
    18         }
    19     }
    View Code

    法四(借鉴):先得到其转置矩阵(实际就是根据对角线翻转),然后在根据y轴中线翻转一次,可以得到最终结果。

    根据这个规律,得到如下代码。代码如下(耗时3ms):

     1     public void rotate(int[][] matrix) {
     2         int n = matrix.length;
     3         //得到转置矩阵
     4         for(int i = 0; i < n; i++) {
     5             for(int j = i + 1; j < n; j++) {
     6                 int tmp = matrix[i][j];
     7                 matrix[i][j] = matrix[j][i];
     8                 matrix[j][i] = tmp;
     9             }
    10         }
    11         //沿y轴中线翻转
    12         for(int i = 0; i < n; i++) {
    13             for(int  j = 0; j < n / 2; j++) {
    14                 int tmp = matrix[i][j];
    15                 matrix[i][j] = matrix[i][n - j - 1];
    16                 matrix[i][n - j - 1] = tmp;
    17             }
    18         }
    19     }
    View Code
  • 相关阅读:
    169_Majority Element
    171_Excel Sheet Column Number
    217_Contains Duplicate
    242_Valid Anagram
    【findIndex】根据数组对象某一元素的id,找到此元素在数组所在的位置
    【鼠标右击组件】v-contextmenu
    【 拖拽组件】基于 Sortable.js 的 Vue 拖拽组件。 访问地址:Vue.Draggable
    【vue-markdown编辑器】vue-markdown 组件github地址
    mac下如何制作windows启动盘
    【vue webstorm】WebStorm Vue代码格式错误
  • 原文地址:https://www.cnblogs.com/cing/p/9212299.html
Copyright © 2020-2023  润新知