gpt4 book ai didi

python - 无法在我的旋转矩阵代码中发现错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:30 25 4
gpt4 key购买 nike

我知道有一种使用转置将方阵旋转 90 度的简单方法,但我正在编写一个解决方案,就好像我不知道那个一样(换句话说,我想进行交换)。下面的大致思路是逐层交换。 offset 表示正在交换的层(从外到内)。

这是算法(请注意,它被包装在 class 中,因为那是 Leetcode 的东西):

class Solution:
def rotate(self, matrix):
for start in range(len(matrix)//2):
end = len(matrix) - start - 1

# swap all 4 coordinates:
for offset in range(start, end):
# swap top_left over top_right
temp, matrix[start+offset][end] = matrix[start+offset][end], matrix[start][start+offset]

# swap top_right -> bottom_right
temp, matrix[end][end-offset] = matrix[end][end-offset], temp

# swap bottom_right -> bottom_left
temp, matrix[end-offset][start] = matrix[end-offset][start], temp

# swap bottom_left -> top_left
matrix[start][start+offset] = temp

这适用于一些使用小矩阵的手工测试,以及 Leetcode 提交中的较小输入测试用例。但是,它在以下输入时失败:

[[ 2,  29,  20,  26,  16,  28],
[12, 27, 9, 25, 13, 21],
[32, 33, 32, 2, 28, 14],
[13, 14, 32, 27, 22, 26],
[33, 1, 20, 7, 21, 7],
[ 4, 24, 1, 6, 32, 34]]

预期输出:

[[ 4,  33,  13,  32,  12,   2],
[24, 1, 14, 33, 27, 29],
[ 1, 20, 32, 32, 9, 20],
[ 6, 7, 27, 2, 25, 26],
[32, 21, 22, 28, 13, 16],
[34, 7, 26, 14, 21, 28]]

我的输出:

[[ 4,  33,  13,  32,  12,   2],
[24, 1, 7, 33, 27, 29],
[ 1, 20, 32, 2, 14, 20],
[ 6, 28, 32, 27, 25, 26],
[32, 21, 22, 9, 13, 16],
[34, 7, 26, 14, 21, 28]]

这个矩阵足够大,以至于手动遍历算法变得乏味,就像我调试较小的输入案例时所做的那样。我的实现中的错误在哪里?

最佳答案

你的offsetoff,试试

for offset in range(0, end-start):

关于python - 无法在我的旋转矩阵代码中发现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52490135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com