前往
大廳
主題

LeetCode - 566. Reshape the Matrix 解題心得

Not In My Back Yard | 2020-11-20 00:00:05 | 巴幣 0 | 人氣 287

題目連結:


題目意譯:
在 MATLAB 中有一個相當有用的函式叫做「reshape」,其可以將一個矩陣重新塑形(Reshape)變成另一個不同大小的矩陣,同時保有著原有的資料。

給定你一個以二維陣列代表的矩陣,以及兩個正整數 r 、 c ,依序代表重新塑形後預計的目標列數以及目標行數。

重新塑形後的矩陣應將所有元素按照原矩陣的列探訪(Row-Traversing)之順序依序填入其中。

如果重新塑形這個操作以及給定的參數可行且合法,則輸出重新塑形後的矩陣;反之,輸出原本的矩陣。

注:
給定的矩陣之高度以及寬度坐落於 [1, 100] 的範圍中。
給定的 r 和 c 之值皆為正數。



範例測資:
範例 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 的矩陣。所以輸出原本的矩陣。


解題思維:
先判斷 r 、 c 之乘積是否等於 nums 陣列的大小。如果不等於則不可能重新塑形成目標列數以及行數,所以直接回傳原陣列。

利用雙層迴圈將 nums 陣列一列一列地掃過(列探訪),然後利用兩個計數器 nowRow 以及 nowColumn (假設陣列的索引值從 0 開始,則兩數初始化為 0)代表著現在要將數字填入新矩陣的第 nowRow 列第 nowColumn 列。

每填入一個數字就將 nowColumn 加 1 ,然後判斷 nowColumn 是否等於 c。如果等於 c 則代表新矩陣的一列已經放完了,要換下一列,因此將 nowColumn 歸零並將 nowRow 加 1 。由此,我們便可求出所求的新矩陣。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作