All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0501_0600.s0566_reshape_the_matrix.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0501_0600.s0566_reshape_the_matrix;

// #Easy #Array #Matrix #Simulation #Data_Structure_I_Day_4_Array #Programming_Skills_I_Day_7_Array
// #2022_08_10_Time_1_ms_(90.08%)_Space_51.4_MB_(11.21%)

/**
 * 566 - Reshape the Matrix\.
 *
 * Easy
 *
 * In MATLAB, there is a handy function called `reshape` which can reshape an `m x n` matrix into a new one with a different size `r x c` keeping its original data.
 *
 * You are given an `m x n` matrix `mat` and two integers `r` and `c` representing the number of rows and the number of columns of the wanted reshaped matrix.
 *
 * The reshaped matrix should be filled with all the elements of the original matrix in the same row-traversing order as they were.
 *
 * If the `reshape` operation with given parameters is possible and legal, output the new reshaped matrix; Otherwise, output the original matrix.
 *
 * **Example 1:**
 *
 * ![](https://assets.leetcode.com/uploads/2021/04/24/reshape1-grid.jpg)
 *
 * **Input:** mat = \[\[1,2],[3,4]], r = 1, c = 4
 *
 * **Output:** [[1,2,3,4]]
 *
 * **Example 2:**
 *
 * ![](https://assets.leetcode.com/uploads/2021/04/24/reshape2-grid.jpg)
 *
 * **Input:** mat = \[\[1,2],[3,4]], r = 2, c = 4
 *
 * **Output:** [[1,2],[3,4]]
 *
 * **Constraints:**
 *
 * *   `m == mat.length`
 * *   `n == mat[i].length`
 * *   `1 <= m, n <= 100`
 * *   `-1000 <= mat[i][j] <= 1000`
 * *   `1 <= r, c <= 300`
**/
public class Solution {
    public int[][] matrixReshape(int[][] mat, int r, int c) {
        if ((mat.length * mat[0].length) != r * c) {
            return mat;
        }
        int p = 0;
        int[] flatArr = new int[mat.length * mat[0].length];
        for (int[] ints : mat) {
            for (int anInt : ints) {
                flatArr[p++] = anInt;
            }
        }
        int[][] ansMat = new int[r][c];
        int k = 0;
        for (int i = 0; i < ansMat.length; i++) {
            for (int j = 0; j < ansMat[i].length; j++) {
                ansMat[i][j] = flatArr[k++];
            }
        }
        return ansMat;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy