题目如下:
解题思路:记grid的行数为row,列数为col,显然经过row*col次移动后和不移动效果是一样的,所以可以首先令k = k%(row*col)。剩下的k就是每一个元素需要移动的次数,我的方法是给grid的每个元素编号,从左到右,从上到下,依次为0,1,1....row*col - 1,这样方便计算。
代码如下:
class Solution(object): def shiftGrid(self, grid, k): """ :type grid: List[List[int]] :type k: int :rtype: List[List[int]] """ row = len(grid) col = len(grid[0]) k = k%(row * col) res = [[0] * col for _ in range(row)] for i in range(row): for j in range(col): inx = (i*col + j) + k if inx >= (row*col):inx -= row*col newrow = inx/col newcol = inx%col res[newrow][newcol] = grid[i][j] return res