1. 概述
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
2. 解题
<?phpfunction printMatrix($matrix) {array_walk($matrix, function (&$v) {$v = implode(',', $v);$v = "[{$v}]";});print_r($matrix);}class Solution {/*** @param Integer[][] $matrix* @return NULL*/public function setZeroes(&$matrix) {$row = count($matrix);$col = count($matrix[0]);// 遍历除首行,首列外,如果有需要置0的行或列, 记录到首行首列中for ($i = 1; $i < $row; $i++) {for ($j = 1; $j < $col; $j++) {if ($matrix[$i][$j] == 0) {$matrix[0][$j] = 0;$matrix[$i][0] = 0;}}}// 遍历需要置0的行列for ($i = 1; $i < $row; $i++) {if ($matrix[$i][0] != 0) {continue;}for ($j = 1; $j < $col; $j++) {$matrix[$i][$j] = 0;}}for ($j = 1; $j < $col; $j++) {if ($matrix[0][$j] != 0) {continue;}for ($i = 0; $i < $row; $i++) {$matrix[$i][$j] = 0;}}// 处理首行,首列需要置0$firstRow = $firstCol = false;for ($i = 0; $i < $row; $i++) {if ($firstCol) {$matrix[$i][0] = 0;continue;}if ($matrix[$i][0] == 0) {$i = 0;$firstCol = true;}}for ($j = 0; $j < $col; $j++) {if ($firstRow) {$matrix[0][$j] = 0;continue;}if ($matrix[0][$j] == 0) {$j = 0;$firstRow = true;}}return;}}$matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]];printMatrix($matrix);$cls = new Solution();$cls->setZeroes($matrix);printMatrix($matrix);
