1. 程式人生 >實用技巧 >其它 >LeetCode 每日一題566. 重塑矩陣

LeetCode 每日一題566. 重塑矩陣


技術標籤:每日一題leetcode演算法javamatlab

566. 重塑矩陣

在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 都是正數。

方法一:

解題思路

簡單題,直接上程式碼

參考程式碼

public int[][] matrixReshape(int[][] nums, int r, int c) {
    int R = nums.length, C = nums[0].length;
    if (R * C != r * c || (R == r && C == c)) {
        return nums;
    }

    int[][] ans = new int[r][c];
    for (int i = 0; i < R; i++) {
        for (int j = 0; j < C; j++) {
            int idx = i * C + j;
            ans[idx / c][idx % c] = nums[i][j];
        }
    }
    return ans;
}

執行結果

LeetCode 每日一題566. 重塑矩陣