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

如何修改Python矩阵旋转代码以支持非方阵90度顺时针旋转?

解决任意矩阵90度顺时针旋转的问题

你的代码目前仅能处理方阵,核心问题在于提前固定了新矩阵的维度,以及元素映射的索引逻辑错误,同时打印矩阵的函数也存在适配非方阵的问题。以下是修正后的实现,完全支持任意维度的矩阵(包括空矩阵、非方阵),严格遵循“分配新二维数组→填充旋转后元素→复制回原矩阵”的要求:

问题分析

  1. 非方阵旋转后维度会变化:比如m行n列的矩阵,旋转后变为n行m列,不能提前固定新矩阵的大小
  2. 90度顺时针旋转的元素映射规则:原矩阵matrix[m][n]中,位置(i,j)的元素,旋转后会出现在新矩阵的(j, m-1-i)位置
  3. 原打印函数的循环逻辑错误:应该遍历矩阵的所有行,而不是按列数循环

修正后的完整代码

def show_matrix(arr):
    # 处理空矩阵或空行的情况
    if not arr or not arr[0]:
        print([])
        return
    # 遍历所有行打印
    for row in arr:
        print(row)

def rotate_90_clockwise(matrix):
    # 处理空矩阵
    if not matrix or not matrix[0]:
        return []
    
    m = len(matrix)       # 原矩阵行数
    n = len(matrix[0])    # 原矩阵列数
    
    # 创建新的二维数组,维度为n行m列,初始化为0
    rotated = [[0 for _ in range(m)] for _ in range(n)]
    
    # 填充旋转后的元素
    for i in range(m):
        for j in range(n):
            rotated[j][m - 1 - i] = matrix[i][j]
    
    # 将新矩阵复制回原矩阵(这里直接返回新矩阵,若要修改原变量可重新赋值)
    return rotated

# 测试示例
# 方阵测试
square_matrix = [[1,2,3],[4,5,6],[7,8,9]]
print("原方阵:")
show_matrix(square_matrix)
rotated_square = rotate_90_clockwise(square_matrix)
print("\n旋转后方阵:")
show_matrix(rotated_square)

# 非方阵测试(2行3列)
rect_matrix = [[1,2,3],[4,5,6]]
print("\n原非方阵:")
show_matrix(rect_matrix)
rotated_rect = rotate_90_clockwise(rect_matrix)
print("\n旋转后非方阵:")
show_matrix(rotated_rect)

# 空矩阵测试
empty_matrix = []
print("\n原空矩阵:")
show_matrix(empty_matrix)
rotated_empty = rotate_90_clockwise(empty_matrix)
print("\n旋转后空矩阵:")
show_matrix(rotated_empty)

代码说明

  • show_matrix函数:修复了原函数的循环逻辑,直接遍历矩阵的每一行打印,适配所有维度的矩阵
  • rotate_90_clockwise函数:
    1. 先获取原矩阵的行数m和列数n,动态创建对应维度的新矩阵
    2. 使用双重循环按照旋转规则填充新矩阵,确保每个元素映射到正确位置
    3. 返回旋转后的新矩阵,若需要直接修改原变量,可在调用时执行matrix = rotate_90_clockwise(matrix)

内容的提问来源于stack exchange,提问作者Sanat Sadangi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:57:37