每日一題 120 矩陣置零

2021-10-22 11:52:25 字數 1990 閱讀 1542

給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。

示例 1:

輸入: 

[ [1,1,1],

[1,0,1],

[1,1,1]

]輸出:

[ [1,0,1],

[0,0,0],

[1,0,1]

]

示例 2:

輸入: 

[ [0,1,2,0],

[3,4,5,2],

[1,3,1,5]

]輸出:

[ [0,0,0,0],

[0,4,5,0],

[0,3,1,0]

]

高階:

乙個直接的解決方案是使用 o(mn) 的額外空間,但這並不是乙個好的解決方案。

乙個簡單的改進方案是使用 o(m + n) 的額外空間,但這仍然不是最好的解決方案。

你能想出乙個常數空間的解決方案嗎?

方法一:o(m

n)

o(mn)

o(mn

) 的額外空間

**實現:

class

solution

int m = matrix.size();

int n = matrix[0]

.size();

vectorint>> copy = matrix;

for(

int i =

0; i < m; i++)

}}}private:

bool rowcontainszero(

int i, vectorint>>

& copy)

}return false;

}bool colcontainszero(

int j, vectorint>>

& copy)

}return false;}}

;

方法二:o(m

+n

)o(m + n)

o(m+n)

的額外空間

**實現:

class

solution

int m = matrix.size();

int n = matrix[0]

.size();

vector<

bool

> rowneedtoset(m, false)

; vector<

bool

> colneedtoset(n, false)

;for

(int i =

0; i < m; i++)

}}for(

int i =

0; i < m; i++)

}}}}

;

方法三:常數空間

每一行和每一列的第乙個元素設定為標識位,如果為0,則標識該行或者該列存在0元素

因為第一行和第一列的元素都是matrix[0][0],令其表示第一行,所以單獨設定乙個flag來標識第一列的情況

要注意順序:如果第一列有0,先對第一列所有置0的話,再對行遍歷的話,會導致所有

**實現::

class

solution}}

// 將需要變0的列設定完畢

for(int m =

1; m < col;

++m)}}

// 將需要變0的行設定完畢

for(int m =

0; m < row; m++)

}}// 如果需要,將第一列設定完畢

if(flag)}}

};

每日刷題 矩陣置零

給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。示例 例 1 輸入 1,1,1 1,0,1 1,1,1 輸出 1,0,1 0,0,0 1,0,1 例 2 輸入 0,1,2,0 3,4,5,2 1,3,1,5 輸出 0,0,0,0 0,4,5,...

leetcode每日一題120

題目 給定乙個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。相鄰的結點在這裡指的是 下標 與 上一層結點下標 相同或者等於 上一層結點下標 1 的兩個結點。示例 2 3,4 6,5,7 4,1,8,3 最小路徑和 2 3 5 1 11 思路分析 以示例為例子,假設是a,下標...

每日一題 移動零

給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。將陣列中所有0刪掉,然後刪掉了幾個就在末尾追加幾個。class solution de...