Set matrix zeros
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
如果矩阵中某一元素为零,则将其所在列与行置为零
package ustc.zyy.LeetCode;
/**
* admin zhang yin ye
* email:zyyjiao@mail.ustc.edu.cn
* 1.先确定第一行和第一列是否需要清零
* 2.扫描剩下的矩阵元素,如果遇到了0,就将对应的第一行和第一列上的元素赋值为0
* 3.根据第一行和第一列的信息,已经可以讲剩下的矩阵元素赋值为结果所需的值了
* 4.根据1中确定的状态,处理第一行和第一列。
* */
public class SetMatrixZero {
public void setZero(int[][] matrix) {
boolean firstRowZero = false;
boolean firstColumnZero = false;
// 判断第一列是不是有零 有的话 就标记 firstColumnZero
for (int i = 0; i < matrix.length; i++) {
if (matrix[i][0] == 0) {
firstColumnZero = true;
break;
}
}
// 判断第一列是不是有零 要是有的话 就标记firstRowZero
for (int j = 0; j < matrix[0].length; j++) {
if (matrix[0][j] == 0) {
firstRowZero = true;
break;
}
}
// 扫描剩下的矩阵 要是遇到了0 就把对应的第一行或者第一列设置为o即可
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了
//
for (int i = 1; i < matrix.length; i++) {
for (int j = 1; j < matrix[0].length; j++) {
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
matrix[i][j] = 0;
}
}
}
// 检查第一列的信息
if (firstColumnZero) {
for (int i = 0; i < matrix.length; i++) {
matrix[i][0] = 0;
}
}
// 检查第一行信息
if (firstRowZero) {
for (int j = 0; j < matrix[0].length; j++) {
matrix[0][j] = 0;
}
}
}
}