LeetCode 48.旋转图像

LeetCode 48.旋转图像

在这里插入图片描述
解题思路:参考了leetcode官方的题解。最简单的方式是借助辅助的数组,将原数组中内容按照旋转规律放入辅助数组内,最后再将辅助数组中的内容放回原数组中。

注:只要返回的结果是原数组,就认为是对原数组进行了修改。像这里利用辅助数组,之后将数值深度拷贝到原数组中就可以。但不能拷贝引用(浅拷贝),比如最后原数组内容不是数值上的拷贝辅助数组,而是辅助数组的引用,这样的话,也不算修改了原数组。

除了上面借助辅助数组的方式实现原地旋转,还可以通过翻转实现。对原数组先水平翻转,再主对角线翻转就能实现数组原地旋转。具体可以参考leetcode官方题解。下面对这两种方法都进行一下代码实现:

代码实现:

//方法一:借助辅助数组
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        auto matrix_new = matrix;
        for (int row = 0; row < n; ++row) {
            for (int col = 0; col < n; ++col) {
                matrix_new[col][n - row - 1] = matrix[row][col];
            }
        }
        matrix = matrix_new;
    }
};

//方法二:通过翻转实现
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        //水平翻转
        for (int row = 0; row < n / 2; ++row) {
            for (int col = 0; col < n; ++col) {
                swap(matrix[row][col], matrix[n - row - 1][col]);
            }
        }

        //主对角线翻转
        for (int row = 0; row < n; ++row) {
            for (int col = 0; col < row; ++col) {
                swap(matrix[row][col], matrix[col][row]);
            }
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值