给定一个 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;

        }
    }
全部评论

相关推荐

点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-26 15:18
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务