算法记录
LeetCode 题目:
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 。
说明
一、题目
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 。
二、分析
- 题目其实很简单,难就难在需要在原地进行操作。
- 我们首先需要建立这样的一个观念,如果说一个坐标的值为零,那么意味着他的横列边缘的点也要置为零。
- 而一旦一行列的坐标为零,那么处在这个行列上的点都应该置为零。
- 还要注意的是如果说本身边缘列存在零,那么整个边缘列都应该置为零。
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
boolean flag = false;
for (int i = 0; i < m; i++) {
if (matrix[i][0] == 0) {
flag = true;
}
for (int j = 1; j < n; j++) {
if (matrix[i][j] == 0) {
matrix[i][0] = matrix[0][j] = 0;
}
}
}
for (int i = m - 1; i >= 0; i--) {
for (int j = 1; j < n; j++) {
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
matrix[i][j] = 0;
}
}
if (flag) {
matrix[i][0] = 0;
}
}
}
}
总结
变换思维。