LeetCode 每日一題566. 重塑矩陣
阿新 • 來源:網路 • 發佈:2021-02-19
技術標籤:每日一題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;
}
執行結果

