73. 矩阵置零

题目链接:https://leetcode.cn/problems/set-matrix-zeroes/description/?source=vscode

 

 

 

 

 

 

 

 

 

 

 

 

解析:

还是很有趣的一题,两个点

1、行列分开标记

2、用第0行和第0列来标记其他行和列,那0行,0列怎么办?只需要两个变量标记0行、0列是否有0即可,那(0, j) 或者 (i, 0)谁来标记?当然是(0, j) 或者 (i, 0)

3、这是对2的另一种思考,因为(i, j)为0,则表示i行和j列全部取0,那所有的状态都可以转移到第0行、第0列上。

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        bool flag_row = false, flag_col = false;
        int n = matrix.size();
        int m = matrix[0].size();
        for (int i = 0; i < n; i++) {
            if (!matrix[i][0]) {
                flag_col = true;
                break;
            }
        }
        for (int j = 0; j < m; j++) {
            if (!matrix[0][j]) {
                flag_row = true;
                break;
            }
        }
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                if (!matrix[i][0] || !matrix[0][j]) matrix[i][j] = 0;
            }
        }
        if (flag_row) {
            for (int j = 0; j < m; j++) matrix[0][j] = 0;
        }
        if (flag_col) {
            for (int i = 0; i < n; i++) matrix[i][0] = 0;
        }

        
    }
};

  

posted @ 2025-09-02 21:57  WTSRUVF  阅读(6)  评论(0)    收藏  举报