当看到二维俩字的时候我心头一颤,完了,估计很难
仔细一读才发现……我多虑了
在读完题后我的想法只有一个:并不需要循环移动,只需要计算出最终出现的位置再移动即可 汉诺塔永远滴神
我的想法是:将二维数组降维至一维数组,一维数组中的下标通过对列数n整除便可得到二维数组中的行数(注意对行数m求余,否则下标溢出)、对列数n求余便可得到二维数组中的列数,一维数组移动完后的位置再升维到二维数组
(并没有真正降维,计算下标即可)
代码如下:

def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
    m = len(grid)
    n = len(grid[0])
    k %= m * n      # 去除移动完又回到初始位置的部分
    n_grid = [[0 for j in range(n)] for i in range(m)]
    for i in range(m):
        for j in range(n):
            new_i = (i * n + j + k) // n % m
            new_j = (i * n + j + k) % n
            n_grid[new_i][new_j] = grid[i][j]

    return n_grid

之后我兴致勃勃去看官解,哇塞,几乎一模一样,第一次 感动
我最开始想的Python应该还有另一种解法:先降维,然后移动,再切片升维
但感觉有点复杂,想了想便作罢(昨天那一道题真被打击到了)
人生苦短,我用Python