给定一个N阶方阵int[][](C++中为vector<vector><int>>)mat及其阶数n,若方阵中某个元素为0,则将其所在的行与列清零。返回改变后的int[][]方阵(C++中为vector<vector><int>>),保证n小于等于300,矩阵中的元素在nt范围内。</int></vector></int></vector>
测试样例:
[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]
给定一个N阶方阵int[][](C++中为vector<vector><int>>)mat及其阶数n,若方阵中某个元素为0,则将其所在的行与列清零。返回改变后的int[][]方阵(C++中为vector<vector><int>>),保证n小于等于300,矩阵中的元素在nt范围内。</int></vector></int></vector>
[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]
public class Clearer { public int[][] clearZero(int[][] mat, int n) { // write code here if (mat == null) { return mat; } int row_num = mat.length; int column_num = mat[0].length; boolean[] row_flag = new boolean[row_num]; boolean[] column_flag = new boolean[column_num]; for (int i = 0; i < row_num; i++) { for (int j = 0; j < column_num; j++) { if (mat[i][j] == 0) { row_flag[i] = true; column_flag[j] = true; } } } for (int i = 0; i < row_num; i++) { for (int j = 0; j < column_num; j++) { if(row_flag[i] || column_flag[j]) { mat[i][j] = 0; } } } return mat; } }
//自己想到的方法,跟大神的不谋而合,两个整形数组改成boolea数组为占用更小空间,懒得改了 public int[][] clearZero(int[][] mat, int n) { if(mat==null||n<=0) return mat; int[] column=new int[n]; int[] row=new int[n]; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(mat[i][j]==0){ row[i]=1; column[j]=1; } } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++)if(row[i]==1||column[j]==1) mat[i][j]=0; } return mat; }
import java.util.*; public class Clearer { public int[][] clearZero(int[][] mat, int n) { int [][] res = mat; ArrayList<Integer> i_list = new ArrayList<>(); ArrayList<Integer> j_list = new ArrayList<>(); for (int i = 0; i < n; i ++) { for (int j = 0; j < n; j ++) { if (mat[i][j] == 0) { i_list.add(i); j_list.add(j); } } } for (int l = 0; l < i_list.size(); l ++) { for (int k = 0; k < n;k ++) { res[k][j_list.get(l)] = 0; res[i_list.get(l)][k] = 0; } } return res; } }
}
import java.util.*; public class Clearer { public int[][] clearZero(int[][] mat, int n) { // write code here HashSet<Integer> rowSet = new HashSet<Integer>(); HashSet<Integer> colSet = new HashSet<Integer>(); for (int i = 0; i < n; i ++) { for (int j = 0; j < n; j ++) { if (mat[i][j] == 0) { rowSet.add(i); colSet.add(j); } } } Iterator<Integer> rowIterator = rowSet.iterator(); while (rowIterator.hasNext()) { int zeroRow = rowIterator.next(); for (int j = 0; j < n; j ++) { mat[zeroRow][j] = 0; } } Iterator<Integer> colIterator = colSet.iterator(); while (colIterator.hasNext()) { int zeroCol = colIterator.next(); for (int i = 0; i < n; i ++) { mat[i][zeroCol] = 0; } } return mat; } }
}
import java.util.*; public class Clearer { public int[][] clearZero(int[][] mat, int n) { // write code here HashMap<Integer,Integer> row=new HashMap<Integer,Integer>(); HashMap<Integer,Integer> clo=new HashMap<Integer,Integer>(); ArrayList<Integer> ro=new ArrayList<Integer>(); ArrayList<Integer> cl=new ArrayList<Integer>(); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(mat[i][j]==0) { if(!row.containsKey(i)) { row.put(i,i); ro.add(i); } if(!clo.containsKey(j)) { clo.put(j,j); cl.add(j); } } } } if(ro.size()!=0) { int num=0; while(num<ro.size()) { for(int i=0;i<n;i++) { mat[ro.get(num)][i]=0; } num++; } } if(cl.size()!=0) { int num=0; while(num<cl.size()) { for(int i=0;i<n;i++) { mat[i][cl.get(num)]=0; } num++; } } return mat; } }
import java.util.*; public class Clearer { public int[][] clearZero(int[][] mat, int n) { // write code here HashSet<Integer> xHash = new HashSet<>(); HashSet<Integer> yHash = new HashSet<>(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(mat[i][j] == 0){ xHash.add(i); yHash.add(j); } } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(xHash.contains(i) || yHash.contains(j)) mat[i][j] = 0; } } return mat; } }