矩阵中有0的元素,将它所在的行和列中的元素设置为0
执行前:
[0,2 ,4 ,5 ]
[2,34,0,43],
[34,4,8,56]
执行后:
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 4, 0, 56]
public class MyAlg {
public static void main(String[] args) {int[][] matrix = { {0,2,4,5},
{2,34,0,43},
{34,4,8,56}};
MyAlg.setZeros(matrix);
for(int i = 0; i < matrix.length; i++){
System.out.println(Arrays.toString(matrix[i]));
}
}
public static void setZeros(int[][] matrix){
boolean isRowExsit = false;
boolean isColExsit = false;
//标记Column
for(int i = 0; i < matrix.length; i++){
if(matrix[i][0] == 0){
isColExsit = true;
break;
}
}
//标记Row
for(int i = 0; i < matrix[0].length; i++){
if(matrix[0][i] == 0){
isRowExsit = true;
break;
}
}
//标记有0元素的行和列
for(int i = 1; i < matrix.length; i++){
for(int j = 1; j < matrix[0].length; j++){
if(matrix[i][j] == 0){
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
//设置有元素的行和列为0 CORE PROBLEM
for(int i = 1; i < matrix.length; i++){
for(int j = 1; j < matrix[0].length; j++){
if(matrix[0][j] == 0 || matrix[i][0] == 0){
matrix[i][j] = 0;
}
}
}
//判断设置Row和Column
if(isRowExsit){
for(int i = 0; i < matrix[0].length; i++){
matrix[0][i] = 0;
}
}
if(isColExsit){
for(int i = 0; i < matrix.length; i++){
matrix[i][0] = 0;
}
}
}
}