LeetCode 566. Reshape the Matrix

来源:互联网 发布:电缆价格计算软件 编辑:程序博客网 时间:2024/06/10 07:44

问题描述

In MATLAB, there is a very useful function called ‘reshape’, which can reshape a matrix into a new one with different size but keep its original data.

You’re given a matrix represented by a two-dimensional array, and two positive integers r and c representing the row number and column number of the wanted reshaped matrix, respectively.

The reshaped matrix need to 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:

Input:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
Output:
[[1,2,3,4]]
Explanation:
The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.

Example 2:

Input:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
Output:
[[1,2],
[3,4]]
Explanation:
There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.

Note:
The height and width of the given matrix is in range [1, 100].
The given r and c are all positive.

问题分析

给定二维数组nums。给定一个转换后的数组的行r和列c。可以依次遍历nums,然后计算在结果数组中的位置。

算法实现

  public int[][] matrixReshape(int[][] nums, int r, int c) {        if (nums == null || nums.length == 0 || nums[0].length == 0) {            return nums;        }        int row = nums.length;        int colum = nums[0].length;        if (row * colum != r * c) {//输入的数字不合法            return nums;        }        int[][] result = new int[r][c];        int count = 0;//在一维数组中的位置        for (int i = 0; i < row; i++) {            for (int j = 0; j < colum; j++) {                int targetRow = count / c;                int targetCol = count % c;                result[targetRow][targetCol] = nums[i][j];                count++;            }        }        return result;    }
原创粉丝点击