给定一个 mxn 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法**。**
示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
提示:
m == matrix.lengthn == matrix[0].length1 <= m, n <= 200-231 <= matrix[i][j] <= 231 - 1
核心思路:
1.先标记第0行、第0列有没有0;
2.从第1行第1列开始遍历每一项,如果===0,则把对应行的第0列置为0,把对应列的第0行置为0;
3.再次从第1行第1列开始遍历,如果所在行的第0列是0,就把对应行的所有列都置为0;存在所在列的第0行是0,就把对应列的所有行都置为0;
4.最后根据标记,处理第0行和第0列
第0行存在0,就把整个第0行都置为0;
第0列存在0,就把整个第0列都置为0;
TypeScript
/**
Do not return anything, modify matrix in-place instead.
*/
function setZeroes(matrix: number[][]): void {
const rows = matrix.length
const cols = matrix[0].length
let firstrow:boolean = false
let firstcol:boolean = false
for(let i=0;i<rows;i++){
if(matrix[i][0]===0){
firstcol = true
break
}
}
for(let j=0;j<cols;j++){
if(matrix[0][j] === 0){
firstrow = true
break
}
}
for(let i=1;i<rows;i++){
for(let j=1;j<cols;j++){
if(matrix[i][j] === 0){
matrix[i][0] = 0
matrix[0][j] = 0
}
}
}
for(let i=1;i<rows;i++){
for(let j=1;j<cols;j++){
if(matrix[i][0] === 0||matrix[0][j] === 0){
matrix[i][j] = 0
}
}
}
if(firstcol){
for(let i=0;i<rows;i++){
matrix[i][0] = 0
}
}
if(firstrow){
for(let j=0;j<cols;j++){
matrix[0][j] = 0
}
}
};
共勉