LeetCode-in-Java

1260. Shift 2D Grid

Easy

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:

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:

Solution

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Solution {
    public List<List<Integer>> shiftGrid(int[][] grid, int k) {
        if (grid == null) {
            return Collections.emptyList();
        }
        int[] flat = new int[grid.length * grid[0].length];
        int index = 0;
        for (int[] ints : grid) {
            for (int j = 0; j < grid[0].length; ++j) {
                flat[index++] = ints[j];
            }
        }
        int mode = k % flat.length;
        int readingIndex = flat.length - mode;
        if (readingIndex == flat.length) {
            readingIndex = 0;
        }
        List<List<Integer>> result = new ArrayList<>();
        for (int i = 0; i < grid.length; ++i) {
            List<Integer> eachRow = new ArrayList<>();
            for (int j = 0; j < grid[0].length; ++j) {
                eachRow.add(flat[readingIndex++]);
                if (readingIndex == flat.length) {
                    readingIndex = 0;
                }
            }
            result.add(eachRow);
        }
        return result;
    }
}