Leetcode基础刷题之PHP解析( 73. Set Matrix Zeroes)


 2019-7-16 星期二 开始吧

Leetcode基础刷题之PHP解析(55. Jump Game)

9fa1c5a69b7d410a4b87ef969ff0127c.png

给定一个二维数组,只要列或者行中存在0,那么这个行列上的所有数都是0.


这整体思路就是先扫描第一行第一列如果有0的行列,各自标识一下。再扫描其后的数组,如果存在0,则将对应的第一行第一列设置成0,接着再判断除去第一行第一列之后的数组,如果第一行或者第一列有一个是0,那么直接设置它的值是0,最后通过标识把第一行第一列的值更新是否为0。有点绕,具体看代码


代码实现

 /**
     * @param Integer[][] $matrix
     * @return NULL
     */
    function setZeroes(&$matrix) {
        if(empty($matrix) || empty($matrix[0])) return;
        $m=count($matrix);
        $n=count($matrix[0]);
        $row=false;
        $col=false;
        for($i=0;$i<$m;$i++){
            if($matrix[$i][0]==0) $col=true;
        }
        for($i=0;$i<$n;$i++){
            if($matrix[0][$i]==0) $row=true;
        }
        
        for($i=1;$i<$m;$i++){
            for($j=1;$j<$n;$j++){
                if($matrix[$i][$j]==0){
                    $matrix[0][$j]=0;
                    $matrix[$i][0]=0;
                }
            }
        }
        
        for($i=1;$i<$m;$i++){
            for($j=1;$j<$n;$j++){
                if($matrix[$i][0]==0 || $matrix[0][$j]==0){
                    $matrix[$i][$j]=0;
                }
            }
        }
        
        if($row){
            for($i=0;$i<$n;$i++) $matrix[0][$i]=0;
        }
        if($col){
            for($i=0;$i<$m;$i++) $matrix[$i][0]=0;
        }
        return $matrix;
    }

Github整理地址:https://github.com/wuqinqiang/leetcode-php


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: Leetcode PHP题解--D104 167. Two Sum II - Input array is sorted

>> 下一篇: Leetcode PHP题解--D105 1005. Maximize Sum Of Array After K Negations