暴力解法:先全部检索,定位0所在的位置, 记录到新的数组
数组的行列分别进行去重
数组中记录的行列赋值为零
如果直接修改,在行被修改之后,修改列时会因为行已经被修改产生影响
import org.junit.Test;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
public class ZeroMatrix {
@Test
public void test1() {
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 0}, {7, 8, 9}};
ZeroMatrix.solution(arr);
for (int[] l : arr) {
for (int r : l) {
System.out.print(r + " ");
}
System.out.println();
}
}
public static void solution(int[][] arr) {
List<Integer> listRow = new ArrayList<>();//记录存在零的行
List<Integer> listColumn = new ArrayList<>();//记录存在零的列
//遍历,记录零位置的行与列
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
if(arr[i][j] == 0){
listRow.add(i);
listColumn.add(j);
}
}
}
//去重
LinkedHashSet<Integer> hashSetRow = new LinkedHashSet<>(listRow);
LinkedHashSet<Integer> hashSetColumn = new LinkedHashSet<>(listColumn);
int k = 0,l = 0;
for (int i = 0; i < arr.length; i++) {
if(hashSetRow.contains(i)){//此时的i为存在零的行
while(k < arr[0].length){
arr[i][k++] = 0;//行赋值为零
}
}else {
for (int j = 0; j < arr[0].length; j++) {
if (hashSetColumn.contains(j)){//此时的j为存在零的列
while(l < arr.length){
arr[l++][j] = 0;//列赋值为零
}
}
}
}
}
}
}