Leetcode: https://leetcode.com/problems/rotate-image/description/
Given input matrix = [1,2,3], [4,5,6], [7,8,9] rotate the input matrix in-place such that it becomes: [7,4,1], [8,5,2], [9,6,3]
- (x, y), the affected point is
(y, n – x – 1), (n – x – 1, n – y – 1), (n – y – 1, x), “n” is the size of the matrix.
The rotate function=
(x, y) -> (y, n – x – 1) -> (n – x – 1, n – y – 1) -> (n – y – 1, x) -> (x, y). - For the i th line, we start from (i, i) ( !! in for loop j = i ) , and ends at (i, n – 2 – i).
- We only need process half of them. n/2
Reference solution:
- http://www.cnblogs.com/grandyang/p/4389572.html
- http://www.lifeincode.net/programming/leetcode-rotate-image-java/
class Solution { public void rotate(int[][] matrix) { int n = matrix.length; for(int i = 0; i < n / 2; i++){ int colEnd = n-2-i; // j = i for (int j = i; j < colEnd+1; j++){ int temp = matrix[i][j]; matrix[i][j] = matrix[n-j-1][i]; matrix[n-j-1][i] = matrix[n-i-1][n-j-1]; matrix[n-i-1][n-j-1] = matrix[j][n-i-1]; matrix[j][n-i-1] = temp; } } } }