Leetcode 566.重塑矩陣

EIUC_Thread發表於2020-10-22

Leetcode 566.重塑矩陣

  1. 重塑矩陣

在MATLAB中,有一個非常有用的函式 reshape,它可以將一個矩陣重塑為另一個大小不同的新矩陣,但保留其原始資料。

給出一個由二維陣列表示的矩陣,以及兩個正整數r和c,分別表示想要的重構的矩陣的行數和列數。

重構後的矩陣需要將原始矩陣的所有元素以相同的行遍歷順序填充。

如果具有給定引數的reshape操作是可行且合理的,則輸出新的重塑矩陣;否則,輸出原始矩陣。

示例 1:

輸入:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
輸出:
[[1,2,3,4]]
解釋:
行遍歷nums的結果是 [1,2,3,4]。新的矩陣是 1 * 4 矩陣, 用之前的元素值一行一行填充新矩陣。

示例 2:

輸入:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
輸出:
[[1,2],
[3,4]]
解釋:
沒有辦法將 2 * 2 矩陣轉化為 2 * 4 矩陣。 所以輸出原矩陣。

注意:

給定矩陣的寬和高範圍在 [1, 100]。
給定的 r 和 c 都是正數。
class Solution {
    public int[][] matrixReshape(int[][] nums, int r, int c) {
        if(nums == null||nums.length == 0) return new int[0][0];//剪枝
        int row = nums.length;
        int colum = nums[0].length;
        if(row*colum > r*c||row*colum < r*c) return nums;//剪枝
        int answer[][] = new int[r][c];
        int m = 0;
        int n = 0;
        //遍歷新的陣列,將原來陣列的資料填入相應的位置
        for(int i = 0;i < r;i++){
            for(int j = 0;j < c;j++){
                if(n >= colum){//遍歷完一層陣列,跳向下一行
                    m++;
                    n = 0;
                }
                answer[i][j] = nums[m][n];
                n++;
            }
        }
        return answer;
    }
}

執行結果:
通過
顯示詳情
執行用時:1 ms, 在所有 Java 提交中擊敗了100.00% 的使用者
記憶體消耗:39.3 MB, 在所有 Java 提交中擊敗了97.06% 的使用者

相關文章