清除行列

请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。

给定一个N阶方阵int[][](C++中为vector<vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector<vector>),保证n小于等于300,矩阵中的元素为int范围内。

测试样例:
[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]

import java.util.ArrayList;

import java.util.Arrays;
import java.util.List;


public class 清除行列 {
//当矩阵为N*N时,下面是我想到的方法
public static int[][] clearZero(int[][] mat, int n) {
        //用两个数组分别记录0所在的行号和列号
List<Integer> row = new ArrayList<Integer>();
List<Integer> nolumn = new ArrayList<Integer>();
        for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
        if(mat[i][j]==0){
        row.add(i);
        nolumn.add(j);
        }
        }
        }
        for(int i=0;i<row.size();i++){
        int index=row.get(i);
        for(int j=0;j<n;j++){
        mat[index][j]=0;
        }
        }
        for(int i=0;i<nolumn.size();i++){
        int index=nolumn.get(i);
        for(int j=0;j<n;j++){
        mat[j][index]=0;
        }
        }
        return mat;
    }

//接下来是书上的,为M*N的矩阵
public static int[][] clearZero2(int[][] mat, int n) {
//用两个布尔型数组记录0的位置
boolean[] row = new boolean[mat.length];
boolean[] nolumn = new boolean[mat[0].length];
for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
        if(mat[i][j]==0){
        row[i]=true;//row对应行位零的行号
        nolumn[j]=true;//nolumn对应列为0列号
        }
        }
        }
//若行列有一个为true,就将mat[i][j]置为0
for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
        if(row[i]||nolumn[j]){
        mat[i][j]=0;
        }
        }
        }
        return mat;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值