Leetcode基础刷题之PHP解析( 73. Set Matrix Zeroes)
2019-7-16 星期二 开始吧
上一题链接Leetcode基础刷题之PHP解析(55. Jump Game)
题目描述
给定一个二维数组,只要列或者行中存在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
No Comments