LeetCode 048 Rotate Image

题目要求将一个n*n的方阵顺时针旋转90度。使用原方阵的空间(in-place)。

考虑方阵中的一个点(i,j),这个位置在旋转以后会被原来在(n-1-j,i)的点覆盖。位置(n-1-j,i)又会被原来在(n-1-i,n-1-j)的点覆盖。位置(n-1-i,n-1-j)会被原来在(j,n-1-i)的点覆盖。最后,(j,n-1-i)会被原来在(i,j)的点覆盖。所以这是一个四个数轮换的过程。要求使用原方阵空间,我们可以对其四分之一的部分的所有点都找四个轮换点进行轮换,这样就完成了旋转。

代码:

void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        for(int i = 0 ; i < n / 2 ; i++) {
            for(int j = 0 ; j < n / 2 + n % 2 ; j++) { //注意j的范围
                int k = matrix[j][n - 1 - i];
                matrix[j][n - 1 - i] = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - j][i];
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
                matrix[n - 1 - i][n - 1 - j] = k;
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值