无法在旋转矩阵代码中发现错误

seg*_*way 1 python algorithm matrix

我知道有一种简单的方法,使用转置旋转方形矩阵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
Run Code Online (Sandbox Code Playgroud)

这适用于一些小矩阵的手动测试,以及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]]
Run Code Online (Sandbox Code Playgroud)

预期产量:

[[ 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]]
Run Code Online (Sandbox Code Playgroud)

我的输出:

[[ 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]]
Run Code Online (Sandbox Code Playgroud)

这个矩阵足够大,可以像手工操作算法一样繁琐,就像我为调试的较小输入案例所做的那样.我的实施中的错误在哪里?

ing*_*gen 6

offset,尝试

for offset in range(0, end-start):
Run Code Online (Sandbox Code Playgroud)