zoukankan      html  css  js  c++  java
  • leetcode 73. Set Matrix Zeroes

    73. Set Matrix Zeroes

    题目要求是二维数组中出现0的地方所在行和所在列全变成0。

    题目的关键是O(1)的时间复杂度,也就是在原地做。

    思路:将第一行、第一列,除了(0,0)这个点的其他所有点用来记录这一行或者这一列是否出现0。

    具体做法:先判断第一行第一列本身是否有0,用两个变量保存。然后遍历从(1,1)到(n-1,n-1)。一个位置出现了0,就把第一行的这一列和第一列的这一行的位置都置为0,用来表示这一行和这一列之后都需要被处理。然后遍历第一行和第一列,遇到0就将对应的一列或者一行置为0。最后再判断原始第一行第一列是否有0,如果有就把第一行或者第一列全置为0。

    为什么第一行、第一列可以用来作为标记,因为只要这一行这一列出现了,那对应的第一行或者第一列那个位置本身也要被置为0,并且不管这一行或者这一列出现多少次,反正都是要被置为0。

    class Solution {
    public:
        void setZeroes(vector<vector<int>>& matrix) {
            int m = matrix.size();
            if(m <= 0)
                return;
            int n = matrix[0].size();
            if(n <= 0)
                return;
            bool flag_row = false,flag_col = false;
            for(int j = 0;j < n;j++){
                if(matrix[0][j] == 0){
                    flag_row = true;
                    break;
                }
            }
            for(int i = 0;i < m;i++){
                if(matrix[i][0] == 0){
                    flag_col = true;
                    break;
                }
            }
            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;
                    }
                }
            }
            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;
                }
            }
            if(flag_row){
                for(int j = 0;j < n;j++)
                    matrix[0][j] = 0;
            }
            if(flag_col){
                for(int i = 0;i < m;i++)
                    matrix[i][0] = 0;
            }
            return;
        }
    };
  • 相关阅读:
    DIV+CSS列表式布局(同意图片的应用)
    Cache 应用程序数据缓存
    mysql 中 isnull 和 ifnull 判断字段是否为null
    Logo图标快速生成软件(Sothink Logo Maker) v3.5 官方设计师版
    Linqer工具
    mvc学习视频
    MvcPager注意版本与mvc的版本
    此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭“的解决
    ASP.NET 免费开源控件
    逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/10924272.html
Copyright © 2011-2022 走看看