/** * 48. Rotate Image * <p> * You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise). * <p> * You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation. * <p> * <p> * <p> * Example 1: * <p> * <p> * Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] * Output: [[7,4,1],[8,5,2],[9,6,3]] * Example 2: * <p> * <p> * Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] * Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]] * Example 3: * <p> * Input: matrix = [[1]] * Output: [[1]] * Example 4: * <p> * Input: matrix = [[1,2],[3,4]] * Output: [[3,1],[4,2]] * <p> * <p> * Constraints: * <p> * matrix.length == n * matrix[i].length == n * 1 <= n <= 20 * -1000 <= matrix[i][j] <= 1000 */public class Lesson48 { public static void main(String[] args) { int len = (int) (Math.random() * 10); int[][] matrix = new int[len][len]; for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) { matrix[i][j] = (int) (Math.random() * 1000); } } printMatrix(matrix); new Solution().rotate(matrix); printMatrix(matrix); } private static void printMatrix(int[][] matrix) { int n = matrix.length; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("["); for (int i = 0; i < n; i++) { stringBuilder.append("["); for (int j = 0; j < n; j++) { stringBuilder.append(matrix[i][j]).append(j == n -1 ? "" : ","); } stringBuilder.append(i == n -1 ? "]" : "],").append("\n"); } stringBuilder.append("]"); Util.println(stringBuilder); } static class Solution { public void rotate(int[][] matrix) { int n; if (matrix == null || (n = matrix.length) == 0 || matrix[0].length != n) { return ; } int[] tempArr = new int[4]; for (int end = n, start = 0; end > 0 && end - start > 1; end--,start = n - end) { int last = end - 1; for (int i = start; i < end - 1; i++) { int offset = (i - start); tempArr[0] = matrix[start][i]; tempArr[1] = matrix[i][last]; tempArr[2] = matrix[last][last - offset]; tempArr[3] = matrix[last - offset][start]; matrix[start][i] = tempArr[3]; matrix[i][last] = tempArr[0]; matrix[last][last - offset] = tempArr[1]; matrix[last - offset][start] = tempArr[2]; } } } }}