566. Reshape the Matrix
В MATLAB есть удобная функция под названием reshape, которая может преобразовать матрицу размером m x n в новую матрицу с другим размером r x c, сохраняя исходные данные.
Вам дана матрица m x n mat и два целых числа r и c, представляющие количество строк и столбцов желаемой преобразованной матрицы.
Преобразованная матрица должна быть заполнена всеми elementами исходной матрицы в том же порядке обхода строк, в котором они были.
Если операция преобразования с заданными параметрами возможна и допустима, выведите новую преобразованную матрицу; в противном случае выведите исходную матрицу.
Beispiel:
Input: mat = [[1,2],[3,4]], r = 1, c = 4
Output: [[1,2,3,4]]
C# Lösung
zugeordnet/originalpublic 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++ Lösung
Auto-Entwurf, vor dem Einreichen prüfen#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 Lösung
zugeordnet/originalpublic 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 Lösung
zugeordnet/originalvar 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 Lösung
zugeordnet/originalclass 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 Lösung
zugeordnet/originalfunc 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. Если преобразование невозможно, вернуть исходную матрицу.
Создать новый Array для хранения преобразованной матрицы. Перебрать все elementы исходной матрицы и вставить их в новый Array в порядке обхода строк.
Вернуть преобразованную матрицу, если преобразование возможно, иначе вернуть исходную матрицу.
😎
Stellen zu dieser Aufgabe
aktive Stellen with overlapping task tags are angezeigt.