LeetCode ---- 48、旋转图像

题目链接

思路:

矩阵可以看成是一个由很多个正方形组成的,每一个正方形可以看成是一个圈,那么每次旋转只需要将圈上的元素按照一定规律旋转即可。规律如下图所示。


同一个颜色的线条代表这一圈中4个数移动的轨迹。

一圈移动完毕之后,tR,tC,dR,dC向内部收缩即可。

    public void rotate(int[][] matrix) {
        // 左上角的行坐标
        int tR = 0;
        // 左上角的列坐标
        int tC = 0;
        // 右下角的行坐标
        int dR = matrix.length - 1;
        // 右小角的列坐标
        int dC = matrix[0].length - 1;
        while (tR < dR) {
            int times = dC - tC; // 需要进行旋转的元素数
            int temp = 0;
            for (int i = 0; i != times; i++) {
                // 重点。此处如果不太理解,画一下就好了
                temp = matrix[tR][tC + i];
                matrix[tR][tC + i] = matrix[dR - i][tC];
                matrix[dR - i][tC] = matrix[dR][dC - i];
                matrix[dR][dC - i] = matrix[tR + i][dC];
                matrix[tR + i][dC] = temp;
            }
            tR++;
            tC++;
            dR--;
            dC--;
        }
    }

猜你喜欢

转载自blog.csdn.net/sinat_34679453/article/details/106534827
今日推荐