You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode Rotate Image题修改matrix后stdout正确但输出不变原因咨询

问题产生原因

这个问题的核心是Python的变量绑定机制:

  • 函数参数传递的是原列表对象的引用,你在函数内执行matrix = [xxx]这类赋值操作时,只是把函数内部的局部变量matrix重新绑定到了新创建的列表对象上,完全没有修改外部传入的原二维列表对象本身。
  • 你print的是局部变量matrix指向的新对象的内容,所以输出是正确的,但LeetCode判题时读取的是你传入的原列表对象,自然还是输入的原值,哪怕你硬编码赋值新列表给局部matrix也没用。
解决方法

这个题要求原地修改输入的matrix数组,不需要返回值,你可以用两种方案修复:

方案1:用切片赋值修改原对象内容

如果要保留你现有的计算逻辑,不要直接赋值给matrix变量,改为对matrix的全切片赋值,直接修改原对象的内容,同时把numpy数组转回普通Python列表适配题目类型要求:

import numpy as np
from typing import List

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        # 用[:]切片赋值修改原列表内容,而非重新绑定局部变量
        matrix[:] = [list(col[::-1]) for col in zip(*matrix)]
        # 如果你要保留numpy写法可以改为:
        # matrix[:] = [np.asarray(col[::-1]).tolist() for col in zip(*matrix)]

方案2:原生Python原地旋转(无需额外依赖)

更推荐的无依赖实现,先转置矩阵再逐行反转,全程修改原数组内容:

from typing import List

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        # 原地转置矩阵
        for i in range(n):
            for j in range(i + 1, n):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
        # 逐行反转
        for row in matrix:
            row.reverse()

内容的提问来源于stack exchange,提问作者Will Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:24:03