LeetCode 566 重塑矩阵

LeetCode 566 重塑矩阵

问题描述:
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

执行用时:2 ms, 在所有 Java 提交中击败了76.66%的用户
内存消耗:40.1 MB, 在所有 Java 提交中击败了5.14%的用户

class Solution {
    public int[][] matrixReshape(int[][] nums, int r, int c) {
        //矩阵不合法
        if(nums==null || nums.length==0 || nums[0].length==0) {
            return nums;
        }
        //元素数量不同
        else if(r*c!=nums.length*nums[0].length) {
            return nums;
        }

        //按行填充
        int[][] ans = new int[r][c];
        int rows = nums.length;
        int cols = nums[0].length;
        for(int curr=0; curr<rows*cols; curr++) {
            //元素在原矩阵中的坐标
            int oldRIdx = curr/cols;
            int oldCIdx = curr%cols;
            //元素在当前矩阵中的坐标
            int newRIdx = curr/c;
            int newCIdx = curr%c;
            //元素转移
            ans[newRIdx][newCIdx] = nums[oldRIdx][oldCIdx];
        }

        return ans;
    }
}
posted @ 2020-09-21 09:48  CodeSPA  阅读(92)  评论(0编辑  收藏  举报