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
相关产品推荐
相关产品推荐

