题目:
1.7 编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零。
代码:
/*
* 1.7 编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零。
*/
package mainshijindian;
public class MatrixToZero {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
/*
* 如果直接在原始矩阵上进行操作,则会因为某行某列出现一个0导致该行该列全为0,会对后续检索产生误导,得到错误的矩阵
* 因此使用一个行数组和一个列数组标记为元素为0的行号和列号,然后再次检索该矩阵,如果该行或列号被标记过,则该行列元素置为0.
*/
public void setZeros(int[][] matrix)
{
boolean[] row=new boolean[matrix.length];
boolean[] col = new boolean[matrix[0].length];
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix[0].length;i++) //检索矩阵,标记元素为0的行号和列号
{
if(matrix[i][j]==0)
{
row[i]=true;
col[j]=true;
}
}
}
for(int i=0;i<matrix.length;i++) //再次检索矩阵,将已经标记过的行号和列号中的元素全部置为0
{
for(int j=0;j<matrix[0].length;j++)
{
if(row[i]||col[j])
{
matrix[i][j]=0;
}
}
}
}
}