leetcode-163周赛-1260-二维网格迁移
题目描述:
自己的提交:
class Solution: def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]: m,n = len(grid),len(grid[0]) while k: tmp = [[0] * n for _ in range(m)] for i in range(m): for j in range(n): if j == 0 and i == 0: tmp[i][j] = grid[m-1][n-1] elif j == 0: tmp[i][j] = grid[i-1][n-1] else: tmp[i][j] = grid[i][j-1] grid = tmp k -= 1 return grid
优化:
class Solution: def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]: n, m = len(grid), len(grid[0]) ans = [[0]*m for _ in range(n)] for i in range(n): for j in range(m): p = (i * m + j + k) % (m*n) ans[p//m][p%m] = grid[i][j] return ans
方法二:
class Solution(object): def shiftGrid(self, A, k): vals = [] for r, row in enumerate(A): for c, val in enumerate(row): vals.append(val) N = len(A) * len(A[0]) k %= N if k: vals = vals[-k:] + vals[:-k] else: return A vals = collections.deque(vals) for r, row in enumerate(A): for c, v in enumerate(row): A[r][c] = vals.popleft() return A