【leetcode】Set Matrix Zeroes(middle)
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
思路:不能用额外空间,就用矩阵的第一行和第一列来标记这一行或这一列是否需要置0. 用两个bool量记录第一行和第一列是否需要置0
大神的代码和我的代码都是这个思路,但是我在画0的时候是行列分开处理的,大神的代码是一起处理的
void setZeroes(vector<vector<int> > &matrix) {
        if(matrix.empty())
            return;
        bool iszero1 = false; //第一行是否全0
        bool iszero2 = false; //第一列是否全0
        //第一行 第一列单独拿出来做标记
        for(int j = ; j < matrix[].size(); j++)
        {
            if(matrix[][j] == ) iszero1 = true;
        }
        for(int i = ; i < matrix.size(); i++)
        {
            if(matrix[i][] == ) iszero2 = true;
        }
        for(int i = ; i < matrix.size(); i++)
        {
            for(int j = ; j < matrix[].size(); j++)
            {
                //如果数值为0,把对应那一行的第一个 和 那一列的第一个数字置为0
                if(matrix[i][j] == )
                {
                    matrix[][j] = ;
                    matrix[i][] = ;
                }
            }
        }
        //分行列处理
        //先不考虑[0][0] 位置  如果某一行第一个为0,整行置0
        for(int i = ; i < matrix.size(); i++)
        {
            if(matrix[i][] == )
            {
                for(int j = ; j < matrix[].size(); j++)
                {
                    matrix[i][j] = ;
                }
            }
        }
        for(int j = ; j < matrix[].size(); j++)
        {
            if(matrix[][j] == )
            {
                for(int i = ; i < matrix.size(); i++)
                {
                    matrix[i][j] = ;
                }
            }
        }
        if(iszero1)
        {
            for(int j = ; j < matrix[].size(); j++)
            {
                matrix[][j] = ;
            }
        }
        if(iszero2)
        {
            for(int i = ; i < matrix.size(); i++)
            {
                matrix[i][] = ;
            }
        }
        return;
    }
大神的代码:
public void setZeroes(int[][] matrix) {
    int rownum = matrix.length;
    if (rownum == )  return;
    int colnum = matrix[].length;
    if (colnum == )  return;
    boolean hasZeroFirstRow = false, hasZeroFirstColumn = false;
    // Does first row have zero?
    for (int j = ; j < colnum; ++j) {
        if (matrix[][j] == ) {
            hasZeroFirstRow = true;
            break;
        }
    }
    // Does first column have zero?
    for (int i = ; i < rownum; ++i) {
        if (matrix[i][] == ) {
            hasZeroFirstColumn = true;
            break;
        }
    }
    // find zeroes and store the info in first row and column
    for (int i = ; i < matrix.length; ++i) {
        for (int j = ; j < matrix[].length; ++j) {
            if (matrix[i][j] == ) {
                matrix[i][] = ;
                matrix[][j] = ;
            }
        }
    }
    // set zeroes except the first row and column 一起处理的
    for (int i = ; i < matrix.length; ++i) {
        for (int j = ; j < matrix[].length; ++j) {
            if (matrix[i][] ==  || matrix[][j] == )  matrix[i][j] = ;
        }
    }
    // set zeroes for first row and column if needed
    if (hasZeroFirstRow) {
        for (int j = ; j < colnum; ++j) {
            matrix[][j] = ;
        }
    }
    if (hasZeroFirstColumn) {
        for (int i = ; i < rownum; ++i) {
            matrix[i][] = ;
        }
    }
}
【leetcode】Set Matrix Zeroes(middle)的更多相关文章
- 【leetcode】Spiral Matrix II (middle)
		Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ... 
- 【leetcode】Number of Islands(middle)
		Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ... 
- 【leetcode】Factorial Trailing Zeroes(easy)
		Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ... 
- 【leetcode】Combination Sum III(middle)
		Find all possible combinations of k numbers that add up to a number n, given that only numbers from ... 
- 【leetcode】Insertion Sort List  (middle)
		Sort a linked list using insertion sort. 思路: 用插入排序对链表排序.插入排序是指每次在一个排好序的链表中插入一个新的值. 注意:把排好序的部分和未排序的部分 ... 
- 【leetcode】Repeated DNA Sequences(middle)★
		All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ... 
- 【leetcode】Balanced Binary Tree(middle)
		Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ... 
- 【leetcode】 search Insert Position(middle)
		Given a sorted array and a target value, return the index if the target is found. If not, return the ... 
- 【leetcode】Compare Version Numbers(middle)
		Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ... 
随机推荐
- SQL 分组去重
			select * from (select p.province_name, p.province_code, c.city_name, c.city_code, c.city_id, ROW_NUM ... 
- ASP数据库操作方法
			首先,必须要使用打开数据库方法: <% dim objconn,objconnstr set objconn=server.createobject("adodb.connection ... 
- button事件驱动
			using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ... 
- 【C语言入门教程】1.1 基本程序结构
			基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ... 
- java中堆和栈的区别
			从宏观上来讲,栈内存:存储基本数据类型.堆内存:存储实际的对象内容.说明白点就是new出来的东西. int a = 3; int b = 3; a = 4; 编译器首先会处理int a = 3;将a进 ... 
- Win7 x64bit安装Oracle10g
			解决方案: 步骤一:在解压出的oracle文件夹中搜索refhost.xml文件,搜索结果出现2条符合条件文件,这两个文件均需要修改. 打开文件发现内容中有包含...5.0 6.0等系统说明, ... 
- 本科小白学ROS 和 SLAM(一):杂谈
			本人最近才迷恋上ROS(Robot Operating System),准确的说应该是6月中旬,具体的记不清了(可能是年纪大了,容易健忘).对于一个电子DIY的狂热爱好者来说,我在校的梦想就是做一个属 ... 
- Android自定义标题栏
			预览一下效果: 素材: 新建一个布局title_bar.xml,代码如下: <?xml version="1.0" encoding="utf-8"?&g ... 
- 2016年11月14日--SQL创建数据库、表-查、插、删、改
			--创建数据库(create database 数据库名)create database hq20161114go --使用选择数据库(use 数据库名)use hq20161114go --创建学生 ... 
- Android架构:用消息机制获取网络数据
			网络请求,不管是什么协议,是长连接还是短连接,总是一个异步的请求,过程包括:加请求参数->发起请求->接收响应->解析数据->获得业务数据. 最挫的做法是,业务代码包揽所有这些 ... 
