• leecode 73. 矩阵置零


    给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

    进阶:

    • 一个直观的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
    • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
    • 你能想出一个仅使用常量空间的解决方案吗?

    示例 1:

     

    输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
    输出:[[1,0,1],[0,0,0],[1,0,1]]

    示例 2:

     

    输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
    输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
    /*
     * 73. Set Matrix Zeroes
     * 题意:把含有0的行和列都设成0
     * 难度:Medium
     * 分类:Array
     * 思路:用第一行和第一列作为标志位。注意赋值的时候从后往前,防止标志位被改变
     *      两遍循环,先记录,再置位
     * Tips:注意赋值的顺序,防止标志位被改变
     *       思路是很简单,但有许多细节
     */
        public void setZeroes(int[][] matrix) {
            boolean col0 = false;   //因为 matrix[0][0] 只有一个位置,所以用一个变量单独记录
            for (int i = 0; i < matrix.length ; i++) {
                if(matrix[i][0]==0) col0 = true;
                for (int j = 1; j < matrix[0].length ; j++) {
                    if(matrix[i][j]==0){
                        matrix[i][0] = 0;
                        matrix[0][j] = 0;
                    }
                }
            }
            for (int i = matrix.length-1; i >= 0 ; i--) {   //从后往前,标志位那一行最后改变
                for (int j = matrix[0].length-1; j >= 1 ; j--) {    // j>=1 不包含j==0
                    if( matrix[i][0]==0 || matrix[0][j]==0 ) matrix[i][j] = 0;
                }
                if(col0==true) matrix[i][0]=0;  //要在for循环后,再把[i][0]改变
            }
        }
  • 相关阅读:
    PHP学习(字符串和变量)
    一个操作配置文件(Reg,ini,XML)的类
    Indy中判断邮件来源
    PHP学习(MSSQL数据库连接)
    辛辛苦苦,写了个INNO的安装脚本
    php连接sqlserver
    Sql Server 使用CTE实现递归查询
    使用序列化和反序列化机制深度复制对象
    ASP.NET中不常用的另类绑定方法<%$ %>
    google map事件监听
  • 原文地址:https://www.cnblogs.com/kpwong/p/14651503.html
Copyright © 2020-2023  润新知