zoukankan      html  css  js  c++  java
  • LeetCode

    题目:

    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);
        }
    
    }
  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/null00/p/5076029.html
Copyright © 2011-2022 走看看