题目详情

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]]

思路

  • 我的想法比较简单,就是简单的遍历输入数组,同时把值赋给结果数组的相应位置即可。

解法

    public int[][] matrixReshape(int[][] nums, int r, int c) {
        if(nums == null || nums.length == 0 || r*c != nums.length*nums[0].length) return nums;
        int heightIndex = 0;
        int widthIndex = 0;
        //保存结果数组
        int[][] res = new int[r][c];
        for(int i =0;i<nums.length;i++){
            for(int j=0;j<nums[0].length;j++){
                res[heightIndex][widthIndex] = nums[i][j];
                widthIndex ++;
                if(widthIndex == c){
                    heightIndex ++;
                    widthIndex = 0;
                }
            }
        }
        return res;
    }

soleil阿璐
350 声望45 粉丝

stay real ~