您的位置:首页 > 其它

清除行列

2016-04-27 15:03 183 查看
题目描述

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

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

测试样例:

[[1,2,3],[0,1,2],[0,0,1]]

返回:[[0,0,3],[0,0,0],[0,0,0]]

思路:遍历二维数组,记录值为0的行号、列好,,然后根据行号、列号,逐位清零

C/C++实现

用到动态数组声明并初始化,,

class Clearer {
public:
vector<vector<int> > clearZero(vector<vector<int> > mat, int n) {
// write code here
//bool row
;
//bool colum
;
if(mat.empty())
return vector<vector<int> >();
int len1=mat.size();
int len2=mat[0].size();

bool *row=new bool[len1]();//切记声明后一定要加小括号初始化,否则报错!!
bool *colum =new bool[len2]();

for (int i=0;i<len1;i++)
for(int j=0; j<len2;j++){
if(mat[i][j]==0)
{
row[i]=true;
colum[j]=true;

}
}

for (int i=0;i<len1;i++)
for(int j=0; j<len2;j++){
if(row[i] || colum[j] ){
mat[i][j]=0;
}

}
delete [] row;
delete [] colum ;
return mat;

}
};


Java实现

Java实现相对较为简单

import java.util.*;

public class Clearer {
public int[][] clearZero(int[][] matrix, int n) {
// write code here
boolean[] row = new boolean
;
boolean[] column = new boolean
;

for (int i = 0; i < matrix.length; i++)
{
for (int j = 0; j < matrix[0].length; j++)
{
if (matrix[i][j] == 0)
{
row[i] = true;
column[j] = true;
}
}
}

for (int i = 0; i < matrix.length; i++)
{
for (int j = 0; j < matrix[0].length; j++)
{
if(row[i] || column[j])
{
matrix[i][j] = 0;
}
}
}
return matrix ;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: