给定一个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]]
//楼上的Java版本有点复杂,写了个简单点的。 publicclassClearer { publicint[][] clearZero(int[][] mat, intn) { // write code here boolean[] rowArray = newboolean[n]; boolean[] columnArray = newboolean[n]; //记录为0的位置,把相应的行列位置设为true for(inti=0; i<n;i++) { for(intj=0;j<n;j++) { if(mat[i][j]==0) { rowArray[i]=true; columnArray[j]=true; } } } //遍历找到之前记录的位置,把相应行列赋值为0 for(inti=0;i<n;i++) { for(intj=0;j<n;j++) { if(rowArray[i]||columnArray[j]) { mat[i][j] = 0; } } } returnmat; } }