566. Reshape the Matrix

LeetCode easy оригинал: C# #array #csharp #easy #leetcode #matrix #string

В MATLAB есть удобная функция под названием reshape, которая может преобразовать матрицу размером m x n в новую матрицу с другим размером r x c, сохраняя исходные данные.

Вам дана матрица m x n mat и два целых числа r и c, представляющие количество строк и столбцов желаемой преобразованной матрицы.

Преобразованная матрица должна быть заполнена всеми элементами исходной матрицы в том же порядке обхода строк, в котором они были.

Если операция преобразования с заданными параметрами возможна и допустима, выведите новую преобразованную матрицу; в противном случае выведите исходную матрицу.

Пример:

Input: mat = [[1,2],[3,4]], r = 1, c = 4

Output: [[1,2,3,4]]

C# решение

сопоставлено/оригинал
public class Solution {
    public int[][] MatrixReshape(int[][] mat, int r, int c) {
        int m = mat.Length, n = mat[0].Length;
        if (m * n != r * c) {
            return mat;
        }
        int[][] reshapedMatrix = new int[r][];
        for (int i = 0; i < r; i++) {
            reshapedMatrix[i] = new int[c];
        }
        int row = 0, col = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                reshapedMatrix[row][col] = mat[i][j];
                col++;
                if (col == c) {
                    col = 0;
                    row++;
                }
            }
        }
        return reshapedMatrix;
    }
}

C++ решение

auto-draft, проверить перед отправкой
#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 int[][] MatrixReshape(int[][] mat, int r, int c) {
        int m = mat.size(), n = mat[0].size();
        if (m * n != r * c) {
            return mat;
        }
        int[][] reshapedMatrix = new int[r][];
        for (int i = 0; i < r; i++) {
            reshapedMatrix[i] = new int[c];
        }
        int row = 0, col = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                reshapedMatrix[row][col] = mat[i][j];
                col++;
                if (col == c) {
                    col = 0;
                    row++;
                }
            }
        }
        return reshapedMatrix;
    }
}

Java решение

сопоставлено/оригинал
public class Solution {
    public int[][] matrixReshape(int[][] mat, int r, int c) {
        int m = mat.length, n = mat[0].length;
        if (m * n != r * c) {
            return mat;
        }
        int[][] reshapedMatrix = new int[r][c];
        int row = 0, col = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                reshapedMatrix[row][col] = mat[i][j];
                col++;
                if (col == c) {
                    col = 0;
                    row++;
                }
            }
        }
        return reshapedMatrix;
    }
}

JavaScript решение

сопоставлено/оригинал
var matrixReshape = function(mat, r, c) {
    let m = mat.length, n = mat[0].length;
    if (m * n != r * c) {
        return mat;
    }
    let reshapedMatrix = Array.from({ length: r }, () => Array(c).fill(0));
    let row = 0, col = 0;
    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            reshapedMatrix[row][col] = mat[i][j];
            col++;
            if (col == c) {
                col = 0;
                row++;
            }
        }
    }
    return reshapedMatrix;
};

Python решение

сопоставлено/оригинал
class Solution:
    def matrixReshape(self, mat, r, c):
        m, n = len(mat), len(mat[0])
        if m * n != r * c:
            return mat
        reshaped_matrix = [[0] * c for _ in range(r)]
        row = col = 0
        for i in range(m):
            for j in range(n):
                reshaped_matrix[row][col] = mat[i][j]
                col += 1
                if col == c:
                    col = 0
                    row += 1
        return reshaped_matrix

Go решение

сопоставлено/оригинал
func matrixReshape(mat [][]int, r int, c int) [][]int {
    m, n := len(mat), len(mat[0])
    if m*n != r*c {
        return mat
    }
    reshapedMatrix := make([][]int, r)
    for i := range reshapedMatrix {
        reshapedMatrix[i] = make([]int, c)
    }
    row, col := 0, 0
    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            reshapedMatrix[row][col] = mat[i][j]
            col++
            if col == c {
                col = 0
                row++
            }
        }
    }
    return reshapedMatrix
}

Algorithm

Проверить, можно ли преобразовать матрицу с заданными параметрами r и c. Это возможно, если произведение m * n равно произведению r * c. Если преобразование невозможно, вернуть исходную матрицу.

Создать новый массив для хранения преобразованной матрицы. Перебрать все элементы исходной матрицы и вставить их в новый массив в порядке обхода строк.

Вернуть преобразованную матрицу, если преобразование возможно, иначе вернуть исходную матрицу.

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.