给定一个 m x n 的矩阵,如果一个元素为 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]]
提示:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-matrix-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
因为各行、列的置零过程会对后续判断造成干扰,因此需先完成全部标记,再进行置零操作。
设计一个变量,标记矩阵的第一列是否需置零,然后用第一列标记各行是否需置零,用第一行标记各列(除第一列外)是否需置零。完成标记后,再依次完成各行、列所需的置零操作。
class Solution {
public void setZeroes(int[][] matrix) {
boolean isZero = false;//标记第一列是否存在0
for (int i = 0; i < matrix.length; i++)
if (matrix[i][0] == 0)
isZero = true;
//标记每一行是否存在0
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[0].length; j++)
if (matrix[i][j] == 0) {
matrix[i][0] = 0;
break;
}
//标记每一列是否存在0
for (int j = 1; j < matrix[0].length; j++)
for (int i = 0; i < matrix.length; i++)
if (matrix[i][j] == 0) {
matrix[0][j] = 0;
break;
}
//将除第0列外标记的列置零
for (int j = 1; j < matrix[0].length; j++)
if (matrix[0][j] == 0)
for (int i = 1; i < matrix.length; i++)
matrix[i][j] = 0;
//将标记的行置零
for (int i = 0; i < matrix.length; i++)
if (matrix[i][0] == 0)
for (int j = 1; j < matrix[0].length; j++)
matrix[i][j] = 0;
//将第一列置零
if (isZero == true)
for (int i = 0; i < matrix.length; i++)
matrix[i][0] = 0;
return;
}
}
执行用时 :1 ms,在所有 Java 提交中击败了 99.91% 的用户;
内存消耗 :40.1 MB,在所有 Java 提交中击败了 49.08% 的用户。
暂无。