【leetcode(002)】重塑矩陣
阿新 • • 發佈:2021-02-18
重塑矩陣
在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 都是正數。
思路
- 定義變數,儲存原矩陣的大小
- 將原二維陣列轉換為一維陣列,再將一維陣列轉換為新二維陣列
3. 需要定義一個動態的二維陣列,利用make對其初始化
程式碼
func matrixReshape(nums [][]int, r int, c int) [][]int {
//預處理:計算原二維矩陣的行和列
row, col := len(nums), len(nums[0])
//判斷原矩陣元素個數與目標矩陣元素個數是否一致,不一致則輸出原矩陣
if row*col != r*c{
return nums
}
//建立一個動態的二維陣列
ans := make([][]int, r)
//按行初始化
for i := range ans{
ans[i] = make([]int, c)
}
//轉換
for i := 0 ; i < row*col; i++{
ans[i/c] [i%c] = nums[i/col][i%col]
}
return ans
}