【矩阵专题】Leetcode73.矩阵置零
矩阵置零
一、题目描述
原题链接: LeetCode 73. Set Matrix Zeroes
给你一个
m x n
的矩阵,如果某个元素为 0,则将其所在的整行和整列都设为 0。请你原地进行操作,尽量减少额外空间的使用。
二、示例
输入:
matrix = [[1, 1, 1],[1, 0, 1],[1, 1, 1]
]
输出:
[[1, 0, 1],[0, 0, 0],[1, 0, 1]
]
三、思路分析
使用一个标记数组来解决
思路:
- 首先遍历整个矩阵,如果某个元素为 0,我们就将它的所在行、列记录下来;
- 再次遍历矩阵,如果当前元素的行或列被记录过,就将该位置设置为 0。
四、Java 代码实现
class Solution {public void setZeroes(int[][] matrix) {int n = matrix.length;int m = matrix[0].length;boolean[] row = new boolean[n]; // 标记哪一行要置0boolean[] col = new boolean[m]; // 标记哪一列要置0// 第一次遍历:记录所有为0的行和列for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (matrix[i][j] == 0) {row[i] = true;col[j] = true;}}}// 第二次遍历:根据标记置0for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (row[i] || col[j]) {matrix[i][j] = 0;}}}}
}
五、复杂度分析
- 时间复杂度: O(m × n)
两次完整遍历矩阵,总体是 O(m × n) - 空间复杂度: O(m + n)
使用两个数组来记录行和列的标记信息。