566 重塑矩陣 二維陣列與一維陣列轉換

2021-10-19 12:00:37 字數 1562 閱讀 9551

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

related topics 陣列

思路1:直接遷移的方法,申請乙個ans[r][c]的矩陣,將nums中的元素放入ans陣列中,時間複雜度o(r*c)

class

solution

int ans[

]=newint

[r][c]

;int cnums = nums[0]

.length;

for(

int i =

0; i < nums.length; i++)}

return ans;

}}

原來以為通關了,直到我看到了這個答案:

其實兩者的思想是一致的,都是利用了一維資料上的元素位置 與二維陣列上元素位置的對映關係,但**更易閱讀

matrix[x/c][x%c] = nums[x];

其中c就是二維陣列的列數,x為一維陣列中的索引位置

class

solution

int ans[

]=newint

[r][c]

;int rnums = nums.length;

int cnums = nums[0]

.length;

// 這裡直接採用一維陣列的思想,將一維陣列作為轉換的中介,**更易閱讀

for(

int i =

0; i < rnums * cnums; i++

)return ans;

}}

陣列 Leetcode566 重塑矩陣

難度 簡單 題目 給出乙個由二維陣列表示的矩陣,以及兩個正整數r和c,分別表示想要的重構的矩陣的行數和列數。重構後的矩陣需要將原始矩陣的所有元素以相同的行遍歷順序填充。如果具有給定引數的reshape操作是可行且合理的,則輸出新的重塑矩陣 否則,輸出原始矩陣。示例 1 輸入 nums 1,2 3,4...

一維陣列與二維陣列

1.一維陣列的定義格式為 型別說明符 陣列名 常量表示式 在定義陣列時,需要指定陣列中元素的個數,方括弧中的常量表示式用來表示元素的個數,即陣列長度。常量表示式中可以包括常量和符號常量,但不能包含變數。c語言不允許對陣列的大小作動態定義,即陣列的大小不依賴於程式執行過程中變數的值。在定義陣列時對陣列...

PHP 陣列去重(一維 二維)

array unique函式就是可以處重的,它具備了這個功能了,下面我們一來看乙個關於php使用array unique對二維陣列去重處理例子。php 5.2.9 版本增加了array unique對多維陣列的支援,在處理多維陣列是需要設定sort flags引數 一維陣列的重複項 使用array ...