0
Software Development

## 【Day 24】#1260 - Shift 2D Grid

Given a 2D grid of size m x n and an integer k. You need to shift the grid k times.

In one shift operation:

• Element at grid[i][j] becomes at grid[i][j + 1].
• Element at grid[i][n - 1] becomes at grid[i + 1][0].
• Element at grid[n - 1][n - 1] becomes at grid[0][0].
Return the 2D grid after applying shift operation k times.

Example 1:

``````Input: grid = [[1,2,3],[4,5,6],[7,8,9]], k = 1
Output: [[9,1,2],[3,4,5],[6,7,8]]
``````

Example 2:

``````Input: grid = [[3,8,1,9],[19,7,2,5],[4,6,11,10],[12,0,21,13]], k = 4
Output: [[12,0,21,13],[3,8,1,9],[19,7,2,5],[4,6,11,10]]
``````

Example 3:

``````Input: grid = [[1,2,3],[4,5,6],[7,8,9]], k = 9
Output: [[1,2,3],[4,5,6],[7,8,9]]
``````

Constraints:

``````* m == grid.length
* n == grid[i].length
* 1 <= m <= 50
* 1 <= n <= 50
* -1000 <= grid[i][j] <= 1000
* 0 <= k <= 100
``````

## 解法一

``````from collections import deque
class Solution:
def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
# Minimum movement needed
move = k % (len(grid) * len(grid[0]))
if move == 0:
return grid
res = deque()
for i in grid:
for j in i:
res.append(j)
res.rotate(move)
col = len(grid[0])
for i in range(len(res)):
grid[i//col][i % col] = res[i]
return grid
``````

## 解法二

``````class Solution:
def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
col, nums = len(grid[0]), sum(grid, [])
k = k % len(nums)
nums = nums[-k:] + nums[:-k]
return [nums[i:i+col] for i in range(0, len(nums), col)]
``````

LeetCode刷題日記30