HOME/剑指Offer/

旋转正方形矩阵

Article Outline
TOC
Collection Outline

旋转正方形矩阵

【题目】 给定一个整型正方形矩阵matrix,请把该矩阵调整成顺时针旋转90度的样子。 【要求】 额外空间复杂度为O(1)。

解答还是一圈圈的旋转,首先旋转最外面,然后逐层向里,在旋转的时候唯一需要注意的就是元素之间的位置替换; 图形化

顺时针旋转矩阵_20200109100649

class Solution {
    public void rotate(int[][] matrix) {
        int leftTopRow = 0;
        int leftTopColumn = 0;
        int rightBottomRow = matrix.length - 1;
        int rightBottomColumn = matrix[0].length - 1;
        while(leftTopRow < rightBottomRow){
            rotateEdge(matrix,leftTopRow++,leftTopColumn++,rightBottomRow--,rightBottomColumn--);
        }
    }
    public void rotateEdge(int[][] matrix, int leftTopRow, int leftTopColumn,
    int rightBottomRow, int rightBottomColumn){
        int times = rightBottomColumn - leftTopColumn;
        int temp = 0;
        // i 相当于圈数 0—times -1 ,只需要交换times就可以完成交换
        //这里圈数指每层交换的次数 
        //每次交换 4个
        for(int i = 0; i < times;i++ ){
            temp = matrix[leftTopRow][leftTopColumn + i];
            matrix[leftTopRow][leftTopColumn + i] = matrix[rightBottomRow - i][leftTopRow];
            matrix[rightBottomRow - i][leftTopRow] = matrix[rightBottomRow][rightBottomColumn - i];
            matrix[rightBottomRow][rightBottomColumn - i] = matrix[leftTopRow + i][rightBottomColumn];
            matrix[leftTopRow + i][rightBottomColumn] = temp;
        }
    }
}

leetcode链接:https://leetcode-cn.com/problems/rotate-matrix-lcci/submissions/