LeetCode: Set Matrix Zeroes

来源:互联网 发布:linux修改启动画面 编辑:程序博客网 时间:2024/06/16 03:02

思路:用第一列和第一行的数据来作为0标记,只要M[i][j] = 0,则将M[i][0]、M[0][j] 设置为0,后面则根据第一行、第一列的0来清零。既然用第一行、第一列来进行标记了,那么需要先将第一行、第一列是否出现0保存下来。代码写的有点平凡,但是大致是这个思想。

code:

class Solution {public:    void setZeroes(vector<vector<int> > &matrix) {        int n = matrix.size(), m = matrix[0].size();        int flag = 0;        for(int i = 0;i < n;i++)            if(matrix[i][0] == 0){                flag = 1;                break;            }        for(int j = 0;j < m;j++)            if(matrix[0][j] == 0){                if(flag == 1)                    flag = 3;                else                    flag = 2;                break;            }                for(int i = 0;i < n;i++){            for(int j = 0;j < m;j++){                if(matrix[i][j] == 0){                    matrix[0][j] = 0;                    matrix[i][0] = 0;                }            }        }                for(int i = 1;i < n;i++){            if(matrix[i][0] == 0){                for(int j = 0;j < m;j++)                    matrix[i][j] = 0;            }        }                for(int j = 1;j < m;j++){            if(matrix[0][j] == 0){                for(int i = 0;i < n;i++)                    matrix[i][j] = 0;            }        }                if(flag != 0){            if(flag == 1)                for(int i = 0;i < n;i++)                    matrix[i][0] = 0;            if(flag == 2)                for(int j = 0;j < m;j++)                    matrix[0][j] = 0;            if(flag == 3){                for(int i = 0;i < n;i++)                    matrix[i][0] = 0;                for(int j = 0;j < m;j++)                    matrix[0][j] = 0;            }        }    }};


0 0
原创粉丝点击