在MATLAB中,有一個(gè)非常有用的函數(shù) reshape,它可以將一個(gè)矩陣重塑為另一個(gè)大小不同的新矩陣,但保留其原始數(shù)據(jù)。
給出一個(gè)由二維數(shù)組表示的矩陣,以及兩個(gè)正整數(shù)r和c,分別表示想要的重構(gòu)的矩陣的行數(shù)和列數(shù)。
重構(gòu)后的矩陣需要將原始矩陣的所有元素以相同的行遍歷順序填充。
如果具有給定參數(shù)的reshape操作是可行且合理的,則輸出新的重塑矩陣;否則,輸出原始矩陣。
示例 1:
輸入:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
輸出:
[[1,2,3,4]]
解釋:
行遍歷nums的結(jié)果是 [1,2,3,4]。新的矩陣是 1 * 4 矩陣, 用之前的元素值一行一行填充新矩陣。
示例 2:
輸入:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
輸出:
[[1,2],
[3,4]]
解釋:
沒(méi)有辦法將 2 * 2 矩陣轉(zhuǎn)化為 2 * 4 矩陣。 所以輸出原矩陣。
注意:
給定矩陣的寬和高范圍在 [1, 100]。
給定的 r 和 c 都是正數(shù)。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reshape-the-matrix
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int row = nums.length;
int column = nums[0].length;
if(row * column != r * c)
return nums;
int count = 0;
int k = -1;//計(jì)數(shù) 新的行
int l = 0;//計(jì)數(shù) 新的列
int[][] result = new int[r][c];
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
if(count % c == 0){
k++;
l = 0;
} else {
l++;
}
count++;
result[k][l] = nums[i][j];
}
}
return result;
}
}