給定乙個 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...