1260. Shift 2D Grid

Shift 2D Grid - LeetCode

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] moves to grid[i][j + 1].
Element at grid[i][n - 1] moves to grid[i + 1][0].
Element at grid[m - 1][n - 1] moves to 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

  • code
class Solution {
    public List<List<Integer>> shiftGrid(int[][] grid, int k) {
        int rowLen = grid.length;
        int colLen = grid[0].length;
        
        int[][] res = new int[rowLen][colLen];
        
        for (int row=0; row < rowLen; row++){
            for (int col=0; col < colLen; col++){
                int newcol = (col + k) % colLen;
                int newrow = (row + (col + k) / colLen) % rowLen;
                res[newrow][newcol] = grid[row][col];
            }
        }
        List<List<Integer>> resList = new ArrayList<>();
        for(int[] rows : res) { // res is 2d array
            resList.add(Arrays.stream(rows).boxed().collect(Collectors.toList()));
        }
        return resList;
    }
}
  • code
class Solution:
    def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
        m = len(grid)
        n = len(grid[0])
        # k %= m * n
        res = [[0] * n for _ in range(m)]        
        
        for i in range(m):
            for j in range(n):
                newj = (k + j) % n
                newi = (i + (k + j) // n) % m
                res[newi][newj] = grid[i][j]
                
        return res