矩阵元素置零
问题描述:给定一个m*n的矩阵,如果某个位置是0。将对应的行和列设置为0。
算法设计:
package com.bean.algorithmbasic;
public class SettingZeroProblem {
/*
* 给定一个m*n的矩阵,如果某个位置是0。将对应的行和列设置为0。
* */
public static void main(String[] args) {
int[][] arrayDemo=new int[5][5];
for(int i=0;i<arrayDemo.length;i++) {
for(int j=0;j<arrayDemo[0].length;j++) {
arrayDemo[i][j]=(int)((Math.random())*10);
System.out.print(arrayDemo[i][j]+"\t");
}
System.out.println();
}
SettingZeroProblem szp=new SettingZeroProblem();
szp.setZeroes(arrayDemo);
System.out.println("--------------------------------");
for(int i=0;i<arrayDemo.length;i++) {
for(int j=0;j<arrayDemo[0].length;j++) {
System.out.print(arrayDemo[i][j]+"\t");
}
System.out.println();
}
}
public void setZeroes(int[][] matrix) {
int m = matrix.length;
int n = matrix[0].length;
int i, j;
//先标记第一行和第一列是否有0
boolean firstRow = false, firstCol = false;
for (j = 0; j < n; j++) {
if (0 == matrix[0][j]) {
firstRow = true;
break;
}
}
for (i = 0; i < m; i++) {
if (0 == matrix[i][0]) {
firstCol = true;
break;
}
}
//从第二行第二列还是遍历,如果遇到0,则把它所在行和列的第一个值设为0
for (i = 1; i < m; i++) {
for (j = 1; j < n; j++) {
if (0 == matrix[i][j]) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
//把第一列的0所在行都设为0,把第一行的0所在列都设为0
for (i = 1; i < m; i++) {
if (0 == matrix[i][0]) {
for (j = 1; j < n; j++) {
matrix[i][j] = 0;
}
}
}
for (j = 1; j < n; j++) {
if (0 == matrix[0][j]) {
for (i = 1; i < m; i++) {
matrix[i][j] = 0;
}
}
}
//根据标记决定第一行和第一列是否全设为0
if (firstRow) {
for (j = 0; j < n; j++) {
matrix[0][j] = 0;
}
}
if (firstCol) {
for (i = 0; i < m; i++) {
matrix[i][0] = 0;
}
}
}
}
(完)