码迷,mamicode.com
首页 > 其他好文 > 详细

48.Rotate Image

时间:2018-06-22 13:39:38      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:sed   tps   script   targe   lap   例子   pen   nbsp   规律   

题目链接

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

技术分享图片

法一:新开辟一个数组空间,将每一行的数值赋值给每一列。代码如下(耗时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

 

48.Rotate Image

标签:sed   tps   script   targe   lap   例子   pen   nbsp   规律   

原文地址:https://www.cnblogs.com/cing/p/9212299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!