给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。

对于这种旋转类的题目。首先要选准基准点。选好基准点以后会事半功倍。本题我么可以选准左上角和右下角两个基准点。
第一轮对下列数字进行旋转。定点为[0,0]和[3,3]
[
[ 5, 1, 9, 11],
[ 2, 10],
[13, 7],
[15,14,12,16]
]
请在这里输入引用内容
第二轮对下列数字进行旋转。定点为[1,1]和[2,2]。
[
[3, 6],
[14,12]
]
怎么旋转?对于5,11,16,15这几个数字。首先用tmp暂存5.然后将15放到5的位置,16放到15的位置,11放到16的位置。最后将tmp放到11的位置。对于1,10,12,13也是采用这种方式。首先用tmp暂存1.然后将12放到1的位置,12放到13的位置,10放到12的位置。最后将tmp放到10的位置。 根据这种规律即可完成旋转。每轮旋转以后将左上角定点横纵坐标+1,左上角定点横纵坐标++,右下角定点横纵坐标-1。

public void rotate(int[][] matrix) {
        if (matrix == null || matrix.length == 0) {
            return;
        }
        int rowStart = 0;
        int colStart = 0;
        int rowEnd = matrix.length - 1;
        int colEnd = matrix[0].length - 1;

        while (rowStart < rowEnd) {
            help(matrix,rowStart,colStart,rowEnd,colEnd);
            rowStart++;
            colStart++;
            rowEnd--;
            colEnd--;
        }
    }

    private void help(int[][] matrix, int rowStart, int colStart, int rowEnd, int colEnd) {
        int time = rowEnd - rowStart;
        for (int i = 0; i < time; i++) {
            int tmp = matrix[rowStart][colStart + i];
            matrix[rowStart][colStart + i] = matrix[rowEnd - i][colStart];
            matrix[rowEnd - i][colStart] = matrix[rowEnd][colEnd - i];
            matrix[rowEnd][colEnd - i] = matrix[rowStart + i][colEnd];
            matrix[rowStart + i][colEnd] = tmp;

        }
    }
全部评论

相关推荐

11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务