图解:
C代码1:memset
void setZeroes(int** matrix, int matrixSize, int* matrixColSize) {
// int row[matrixSize] = {0};就会报错!可创建内存,但不能初始化;
int row[matrixSize];
int col[matrixColSize[0]]; // 直接创建内存
memset(row, 0, sizeof(row));
memset(col, 0, sizeof(col));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {
row[i] = col[j] = true;
}
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (row[i] || col[j]) {
matrix[i][j] = 0;
}
}
}
}
C代码2:
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
// 创建数组;创建matrix变量,存放矩阵地址
int* row = (int*)malloc(sizeof(int) * (matrixSize + 1));
int* col = (int*)malloc(sizeof(int) * (matrixColSize[0] + 1));
for (int i = 0; i < matrixSize; ++i) {
for (int j = 0; j < matrixColSize[0]; ++j) {
if (matrix[i][j] == 0) {
row[i] = 1;
col[j] = 1;
}
}
}
for (int i = 0; i < matrixSize; ++i) {
for (int j = 0; j < matrixColSize[0]; ++j) {
if (row[i] == 1 || col[j] == 1) {
matrix[i][j] = 0;
}
}
}
}
Java代码1:
public void setZeroes(int[][] matrix) {
int m = matrix.length;
int n = matrix[0].length;
boolean[] row = new boolean[m]; // 必须得建两个数组
boolean[] col = new boolean[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {
row[i] = col[j] = true;
}
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (row[i] || col[j]) {
matrix[i][j] = 0;
}
}
}
}