[LeetCode刷题] 面试题 01.08. 零矩阵–Java实现
题目链接
https://leetcode-cn.com/problems/zero-matrix-lcci/
题目描述
编写一种算法,若M × N矩阵中某个元素为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]
]
解题思路
1.暴力破解
使用简单思路:双层循环遍历矩阵,找到矩阵中所有的0元素。然后将0元素的所在行和列的序号分别存放在对应的集合中。最后将所以含0元素的行和列清零即可。
时间复杂度:O(m*n);
Java代码实现:
class Solution {
public void setZeroes(int[][] matrix) {
//两个set集合分别存放含有0的行和列的序号
HashSet<Integer> set1 = new HashSet<>();
HashSet<Integer> set2 = new HashSet<>();
//循环遍历含有0的元素
for (int i=0;i<matrix.length;i++){
for (int j=0;j<matrix[0].length;j++){
if (matrix[i][j]==0){
//将0元素的下标分别放在对应集合中
set1.add(i);
set2.add(j);
}
}
}
//将含有0元素的行清零
for (Integer num : set1){
for (int j=0;j<matrix[0].length;j++){
matrix[num][j]=0;
}
}
//将含有0元素的列清零
for (Integer num : set2){
for (int i=0;i<matrix.length;i++){
matrix[i][num]=0;
}
}
}
}