一起学习LeetCode热题100道(20/100)

20.旋转图像(学习)

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:
在这里插入图片描述
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:
在这里插入图片描述
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

提示:
n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000

解析:
转置矩阵
首先,想象你有一个 n × n 的矩阵,你站在它的左上角。现在,沿着从左上到右下的对角线“看”这个矩阵,你会发现如果沿着这条对角线将矩阵“折叠”或“镜像”,那么矩阵的行会变成列,列会变成行。这就是转置的概念。

在转置过程中,你只需考虑矩阵的上三角(包括对角线)元素,因为当你将某个元素(如 matrix[i][j])与它的对称元素(matrix[j][i])交换时,下三角中的对应元素也会被正确地放置。

反转每一行
完成转置后,你得到了一个“躺着”的矩阵,即原矩阵的列现在变成了行,但顺序是相反的。为了得到顺时针旋转 90 度的效果,你需要将每一行都反转(即首尾交换,然后向中间移动)。

var rotate = function(matrix) {
    const n = matrix.length;  
      
    // Step 1: Transpose the matrix  
    for (let i = 0; i < n; i++) {  
        for (let j = i; j < n; j++) {  
            // Swap matrix[i][j] with matrix[j][i]  
            [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];  
        }  
    }  
      
    // Step 2: Reverse each row  
    for (let i = 0; i < n; i++) {  
        let left = 0, right = n - 1;  
        while (left < right) {  
            // Swap matrix[i][left] with matrix[i][right]  
            [matrix[i][left], matrix[i][right]] = [matrix[i][right], matrix[i][left]];  
            left++;  
            right--;  
        }  
    }  
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值