标签:
题目:
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
思路:
1) 把matrix想象成四块,把第一块抠出来并copy一份,然后旋转式copy,代码较长。
package rotation; public class RotateImage { public void rotate(int[][] matrix) { int n = matrix.length; int rows = n / 2; int cols = n % 2 == 0 ? rows : (rows + 1); int[][] tmp = new int[rows][cols]; for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { tmp[i][j] = matrix[i][j]; } } for (int i = rows; i < n; ++i) { for (int j = 0; j < cols; ++j) { matrix[j][n - 1 - i] = matrix[i][j]; } } for (int i = cols; i < n; ++i) { for (int j = rows; j < n; ++j) { matrix[j][n - 1 - i] = matrix[i][j]; } } for (int i = 0; i < cols; ++i) { for (int j = cols; j < n; ++j) { matrix[j][n - 1 - i] = matrix[i][j]; } } for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { matrix[j][n - 1 - i] = tmp[i][j]; } } } public static void main(String[] args) { // TODO Auto-generated method stub // int[][] matrix = {{1,2,3},{5,6,7},{9,10,11}}; int[][] matrix = {{1,2},{3,4}}; RotateImage r = new RotateImage(); r.rotate(matrix); } }
2) 其实可以将上面的代码进行简化合并,如下
package rotation; public class RotateImage { public void rotate(int[][] matrix) { int n = matrix.length; int rows = n / 2; int cols = n - rows; for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { int tmp = matrix[i][j]; matrix[i][j] = matrix[n - 1 - j][i]; matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]; matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]; matrix[j][n - 1 - i] = tmp; } } } public static void main(String[] args) { // TODO Auto-generated method stub // int[][] matrix = {{1,2,3},{5,6,7},{9,10,11}}; int[][] matrix = {{1,2},{3,4}}; RotateImage r = new RotateImage(); r.rotate(matrix); } }
标签:
原文地址:http://www.cnblogs.com/shuaiwhu/p/5076029.html