48. 旋转图像

题目:

思路:

【1】这道题的难点在于要知道旋转的规律与如何避免重复处理的问题

其中xc和yc分别为数组的边界值
xc = 数组行数 - 1 (因为正常下标是从0开始的,而长度统计是比边界值+1的)
yc = 数组列数 - 1
旋转90度
 (x, y) -> (y, xc - x)
旋转180度
 (x, y) -> (xc - x, xc - y)
旋转270度
 (x, y) -> (yc - y, xc - x)

代码展示:

//时间0 ms 击败 100%
//内存39.8 MB 击败 99.47%
class Solution {
    public void rotate(int[][] matrix) {
        // 列数
        int col = matrix[0].length;
        // 行数
        int row = matrix.length;

        // 利用标记来记录是否对某个位置进行过处理
        int[][] flag = new int[row][col];
        // 全部置为没有变动过
        for (int[] ints : flag) {
            Arrays.fill(ints, 0);
        }

        int tem;
        for (int i = 0; i < row; i++){
            for (int j = 0; j < col; j++){
                // 已经处理过了就不再处理
                if (flag[i][j] == 1) continue;
                int oldCol = j;
                int oldRow = i;
                int oldValue = matrix[oldRow][oldCol];
                boolean isRotate = true;
                while (isRotate){
                    int newCol = row - 1 - oldRow;
                    int newRow = oldCol;
                    tem = matrix[newRow][newCol];
                    matrix[newRow][newCol] = oldValue;
                    oldValue = tem;
                    oldRow = newRow;
                    oldCol = newCol;

                    // 如果已经转完一圈了应该结束循环
                    if (newRow == i && newCol == j){
                        isRotate = false;
                    }
                    //将该位置设置为处理过了
                    flag[newRow][newCol] = 1;
                }

            }
        }
    }
}

//时间0 ms 击败 100%
//内存40 MB击败 95.96%
//先将翻转的数据放于辅助空间再覆盖回原数组
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        int[][] matrix_new = new int[n][n];
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix_new[j][n - i - 1] = matrix[i][j];
            }
        }
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix[i][j] = matrix_new[i][j];
            }
        }
    }
}

 

posted @ 2023-06-26 17:03  忧愁的chafry  阅读(4)  评论(0编辑  收藏  举报