1. 程式人生 > 其它 >【leetcode(002)】重塑矩陣

【leetcode(002)】重塑矩陣

技術標籤:Golang演算法題leetcode演算法

重塑矩陣

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

思路

  1. 定義變數,儲存原矩陣的大小
  2. 將原二維陣列轉換為一維陣列,再將一維陣列轉換為新二維陣列

在這裡插入圖片描述
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 }

結果

在這裡插入圖片描述