标签:
Matrix-Rotate Image:
public class Solution { public void rotate(int[][] matrix) { int n = matrix[0].length; int temp; for(int i = 0; i < n; i++){ for(int j = i+1; j < n; j++){ temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } for(int i = 0; i < n; i++){ for(int j = 0; j < n/2; j++){ temp = matrix[i][j]; matrix[i][j] = matrix[i][n-1-j]; matrix[i][n-1-j] = temp; } } } }
或者
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?
Naive Solution
In the following solution, a new 2-dimension array is created to store the rotated matrix, and the result is assigned to the matrix at the end. This is WRONG! Why?
public class Solution { public void rotate(int[][] matrix) { if(matrix == null || matrix.length==0) return ; int m = matrix.length; int[][] result = new int[m][m]; for(int i=0; i<m; i++){ for(int j=0; j<m; j++){ result[j][m-1-i] = matrix[i][j]; } } matrix = result; } } |
The problem is that Java is pass by value not by refrence! "matrix" is just a reference to a 2-dimension array. If "matrix" is assigned to a new 2-dimension array in the method, the original array does not change. Therefore, there should be another loop to assign each element to the array referenced by "matrix". Check out "Java pass by value."
public class Solution { public void rotate(int[][] matrix) { if(matrix == null || matrix.length==0) return ; int m = matrix.length; int[][] result = new int[m][m]; for(int i=0; i<m; i++){ for(int j=0; j<m; j++){ result[j][m-1-i] = matrix[i][j]; } } for(int i=0; i<m; i++){ for(int j=0; j<m; j++){ matrix[i][j] = result[i][j]; } } } } |
In-place Solution
By using the relation "matrix[i][j] = matrix[n-1-j][i]", we can loop through the matrix.
public void rotate(int[][] matrix) { int n = matrix.length; for (int i = 0; i < n / 2; i++) { for (int j = 0; j < Math.ceil(((double) n) / 2.); j++) { int temp = 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] = temp; } } } |
标签:
原文地址:http://www.cnblogs.com/ChrisY/p/5487248.html