1260. Shift 2D Grid

LeetCode easy original: C# #array #csharp #easy #leetcode #matrix
Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

Дана двумерная сетка размером m x n и số nguyên k. it is required сдвинуть сетку k раз. За одну операцию сдвига: element в grid[i][j] перемещается в grid[i][j + 1]. element в grid[i][n - 1] перемещается в grid[i + 1][0]. element в grid[m - 1][n - 1] перемещается в grid[0][0]. return двумерную сетку после Applications операции сдвига k раз.

Ví dụ:

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

Output: [[9,1,2],[3,4,5],[6,7,8]]

C# lời giải

đã khớp/gốc
public class Solution {
    public IList<IList<int>> ShiftGrid(int[][] grid, int k) {
        int m = grid.Length;
        int n = grid[0].Length;
        int total = m * n;
        k = k % total;
        if (k == 0) {
            return grid;
        }
        int[] flatArray = new int[total];
        for (int i = 0; i < total; i++) {
            flatArray[i] = grid[i / n][i % n];
        }
        int[] newArray = new int[total];
        for (int i = 0; i < total; i++) {
            newArray[(i + k) % total] = flatArray[i];
        }
        var newGrid = new List<IList<int>>();
        for (int i = 0; i < m; i++) {
            var newRow = new List<int>();
            for (int j = 0; j < n; j++) {
                newRow.Add(newArray[i * n + j]);
            }
            newGrid.Add(newRow);
        }
        return newGrid;
    }
}

C++ lời giải

bản nháp tự động, xem lại trước khi gửi
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public IList<vector<int>> ShiftGrid(int[][] grid, int k) {
        int m = grid.size();
        int n = grid[0].size();
        int total = m * n;
        k = k % total;
        if (k == 0) {
            return grid;
        }
        vector<int>& flatArray = new int[total];
        for (int i = 0; i < total; i++) {
            flatArray[i] = grid[i / n][i % n];
        }
        vector<int>& newArray = new int[total];
        for (int i = 0; i < total; i++) {
            newArray[(i + k) % total] = flatArray[i];
        }
        var newGrid = new List<vector<int>>();
        for (int i = 0; i < m; i++) {
            var newRow = new List<int>();
            for (int j = 0; j < n; j++) {
                newRow.push_back(newArray[i * n + j]);
            }
            newGrid.push_back(newRow);
        }
        return newGrid;
    }
}

Java lời giải

đã khớp/gốc
import java.util.ArrayList;
import java.util.List;

public class Solution {
    public List<List<Integer>> shiftGrid(int[][] grid, int k) {
        int m = grid.length, n = grid[0].length;
        int total = m * n;
        k %= total;

        if (k == 0) {
            List<List<Integer>> result = new ArrayList<>();
            for (int[] row : grid) {
                List<Integer> newRow = new ArrayList<>();
                for (int val : row) {
                    newRow.add(val);
                }
                result.add(newRow);
            }
            return result;
        }

        int[] flatArray = new int[total];
        for (int i = 0; i < total; i++) {
            flatArray[i] = grid[i / n][i % n];
        }
        
        int[] newArray = new int[total];
        for (int i = 0; i < total; i++) {
            newArray[(i + k) % total] = flatArray[i];
        }

        List<List<Integer>> result = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            List<Integer> newRow = new ArrayList<>();
            for (int j = 0; j < n; j++) {
                newRow.add(newArray[i * n + j]);
            }
            result.add(newRow);
        }
        
        return result;
    }
}

JavaScript lời giải

đã khớp/gốc
var shiftGrid = function(grid, k) {
    const m = grid.length, n = grid[0].length;
    const total = m * n;
    k = k % total;

    if (k === 0) {
        return grid;
    }

    const flatArray = grid.flat();
    const newArray = flatArray.slice(-k).concat(flatArray.slice(0, -k));

    const newGrid = [];
    for (let i = 0; i < m; i++) {
        newGrid.push(newArray.slice(i * n, (i + 1) * n));
    }

    return newGrid;
};

Algorithm

Преобразовать двумерную сетку в одномерный mảng.

Выполнить сдвиг elementов в одномерном mảngе.

Преобразовать одномерный mảng обратно в двумерную сетку.

😎

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.