Set Matrix Zeroes(Medium)

Set Matrix Zeroes by LeeetCode
java编写
public class Set_Matrix_Zeroes {
public static void main(String[] args) {
int[][]a= { {0,1,2,0},
{3,4,5,2},
{1,3,1,5}};
setZeroes(a);
}
public static void setZeroes(int[][] matrix) {
boolean[][] pan = new boolean[matrix.length][matrix[0].length];
for(int i =0;i<matrix.length;i++)
for(int j =0;j<matrix[0].length;j++) {
if(matrix[i][j]==0) {
for(int k = j;k<pan[0].length;k++) {
pan[i][k]=true;
}
for(int k = j;k>=0;k–) {
pan[i][k]=true;
}
for(int k = i;k<pan.length;k++) {
pan[k][j]=true;
}
for(int k = i;k>=0;k–) {
pan[k][j]=true;
}
}
}
for(int i =0;i<matrix.length;i++)
for(int j =0;j<matrix[0].length;j++) {
if(pan[i][j]==true) {
matrix[i][j]=0;
}
}
for(int i =0;i<matrix.length;i++) {
for(int j =0;j<matrix[0].length;j++) {
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
}
}
这次的题目比较简单,就是如果matrix[i][j]==0的话,那么它的横轴竖轴都要变成0,最后把整个矩阵输出出来就好了。但是我这个方法用的内存和时间较久,不推荐这么写。以下为答案:
public void setZeroes(int[][] matrix) {
int R = matrix.length;
int C = matrix[0].length;
Set rows = new HashSet();
Set cols = new HashSet();
// Essentially, we mark the rows and columns that are to be made zero
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (matrix[i][j] == 0) {
rows.add(i);
cols.add(j);
}
}
}
// Iterate over the array once again and using the rows and cols sets, update the elements.
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (rows.contains(i) || cols.contains(j)) {
matrix[i][j] = 0;
}
}
}
}
大佬大佬,竟然用了HashSet,将等于0的i,j放进去。然后下面判断时,凡是包括在里面的i或者j的话,都将它变成0。这个方法真的挺牛逼的,我是没有想到要这么做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值