旋转正方形矩阵

旋转正方形矩阵

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

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

7149586-1acb5f0aede34d6b.png
顺时针旋转矩阵_20200109100649.png
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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值