目录
题目描述:
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
输入:
matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:
[[1,0,1],[0,0,0],[1,0,1]]
代码实现:
java
import java.util.Arrays;
//矩阵置零
public class Main{
public static void main(String[] args) {
//案例
int[][] matrix = new int[][]{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}};
setZeroes(matrix);//[[1, 0, 1],[0, 0, 0],[1, 0, 1]]
}
public static void setZeroes(int[][] matrix) {
//行数
int m = matrix.length;
//列数
int n = matrix[0].length;
//临时数组
int[][] temp = new int[m][n];
//标记临时数组
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] == 0) {
for (int k = 0; k < m; k++) {
//所在一列标记
temp[k][j] = 1;
}
for (int k = 0; k < n; k++) {
//所在一行标记
temp[i][k] = 1;
}
}
}
}
//根据临时数组 置零矩阵
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (temp[i][j] == 1) {
matrix[i][j] = 0;
}
}
}
//输出:每一行
System.out.print("[");
for (int i = 0; i < matrix.length; i++) {
if (i < matrix[i].length - 1) {
System.out.print(Arrays.toString(matrix[i]) + ",");
} else {
//除最后一行后面 不需要接逗号
System.out.print(Arrays.toString(matrix[i]));
}
}
System.out.print("]");
}
}