WEI-CHENG CHEN

說明

核心想法是:有 0 的部分,他的 col 跟 row 都要變成 0

解題

圖片描述

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();
        bool row_flag = false, col_flag = false;

        // 檢查第一row col是否需要設置為 0
        for (int i = 0; i < m; i++){
            if(matrix[i][0]==0){
                row_flag = true;
                break;
            }
        }
        for (int i = 0; i < n; i++){
            if(matrix[0][i]==0){
                col_flag = true;
                break;
            }
        }

        // 第一次處裡:開始去紀錄哪些row/col要轉0(要從[1][1]開始)
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(matrix[i][j]==0){
                   matrix[i][0]=0;
                   matrix[0][j]=0;
                }
            }
        }
        // 第二次處裡:開始取轉0
        for(int i=1;i<m;i++){
            if(matrix[i][0]==0){
                for(int j=1;j<n;j++) matrix[i][j]=0;
            }
        }
        for(int j=1;j<n;j++){
            if(matrix[0][j]==0){
                for(int i=1;i<m;i++) matrix[i][j]=0;
            }
        }

        // 最後最後,再依據flag去開要不要改row=0還有col=0
        if(row_flag){
            for(int i=0;i<m;i++) matrix[i][0] = 0;
        }
        if(col_flag){
            for(int j=0;j<n;j++) matrix[0][j] = 0;
        }

    }
};