48. Rotate Image

25 年 11 月 1 日 星期六
454 字
3 分钟
Screenshot 2025-11-01 at 11.39.01 pm

第col列的元素,变成第col行的元素(不关注元素在行内的顺序,只关注有哪些元素)

第row行的元素,变成第nrow−1列的元素

有 (matrix_{new}[col][n−row−1]=matrix[row][col])

用tmp变量暂存 col 和 n - row - 1 的值

则有

tmp = (matrix_{new}[col][n−row -1])

( matrix[n-row-1][n-col-1] = matrix[col][n−row−1])

直接使用之前的tmp变量储存 ( matrix[n-row-1][n-col-1] )

同理可得

Screenshot 2025-11-02 at 12.03.13 am

我们应该枚举哪些位置 (row,col) 进行上述的原地交换操作呢?

Screenshot 2025-11-02 at 12.04.09 am
Screenshot 2025-11-02 at 12.04.19 am

( (n^2-1)/4 = ((n-1)/2) \times ((n+1)/2) )

js
/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function (matrix) {
  const n = matrix.length
  for (let i = 0; i < Math.floor(n / 2); i++) {
    for (let j = 0; j < Math.floor((n + 1) / 2); j++) {
      const tmp = matrix[i][j]
      matrix[i][j] = matrix[n - j - 1][i]
      matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]
      matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]
      matrix[j][n - i - 1] = tmp
    }
  }
}

方法2:

Screenshot 2025-11-02 at 12.33.12 am
Screenshot 2025-11-02 at 12.47.35 am
js
/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function (matrix) {
  // 转置
  // 遍历对角线下方元素
  const n = matrix.length
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < i; j++) {
      ;[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]]
    }
  }
  // 行反转
  for (const row of matrix) {
    row.reverse() // reverse 返回反转后的array,并且原数组原地反转
  }
}
Screenshot 2025-11-02 at 12.48.13 am
js
var rotate = function(matrix) {
    const n = matrix.length;
    for (let i = 0; i < n; i++) {
        const row = matrix[i];
        for (let j = i + 1; j < n; j++) { // 遍历对角线上方元素,做转置
            const tmp = row[j];
            row[j] = matrix[j][i];
            matrix[j][i] = tmp;
        }
        row.reverse(); // 行翻转
    }
};

作者:灵茶山艾府
链接:https://leetcode.cn/problems/rotate-image/solutions/3655166/shu-xue-ben-zhi-liang-ci-fan-zhuan-deng-aon4a/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

文章标题:48. Rotate Image

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/48_rotate_image[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。