73. Set Matrix Zeroes
Posted panini
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了73. Set Matrix Zeroes相关的知识,希望对你有一定的参考价值。
题目:
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
链接: http://leetcode.com/problems/set-matrix-zeroes/
5/28/2017
3ms, 17%
先确定第一行和第一列是否应该全部置为0,用firstRow, firstColumn表示。这里不改数组的原因是这一行一列会被用作其他行列的标志位。
遍历其他行列,并将第一行第一列相应元素设为0
遍历第一行第一列将相应元素设为0
1 public class Solution { 2 public void setZeroes(int[][] matrix) { 3 if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { 4 return; 5 } 6 int row = matrix.length; 7 int column = matrix[0].length; 8 boolean firstRow = false, firstColumn = false; 9 10 if (!firstColumn) { 11 for (int i = 0; i < row; i++) { 12 if (matrix[i][0] == 0) { 13 firstColumn = true; 14 break; 15 } 16 } 17 } 18 if (!firstRow) { 19 for (int i = 0; i < column; i++) { 20 if (matrix[0][i] == 0) { 21 firstRow = true; 22 break; 23 } 24 } 25 } 26 for (int i = 1; i < row; i++) { 27 for (int j = 1; j < column; j++) { 28 if (matrix[i][j] == 0) { 29 matrix[0][j] = 0; 30 matrix[i][0] = 0; 31 } 32 } 33 } 34 for (int i = 1; i < row; i++) { 35 if (matrix[i][0] == 0) { 36 for (int j = 1; j < column; j++) { 37 matrix[i][j] = 0; 38 } 39 } 40 } 41 for (int i = 1; i < column; i++) { 42 if (matrix[0][i] == 0) { 43 for (int j = 1; j < row; j++) { 44 matrix[j][i] = 0; 45 } 46 } 47 } 48 if (firstColumn) { 49 for (int i = 0; i < row; i++) { 50 matrix[i][0] = 0; 51 } 52 } 53 if (firstRow) { 54 for (int i = 0; i < column; i++) { 55 matrix[0][i] = 0; 56 } 57 } 58 return; 59 } 60 }
别人的算法,大部分跟我写的一样。有一个特别精简的:设第一行第一列用top-down,设其他元素用bottom-up
https://discuss.leetcode.com/topic/5056/any-shorter-o-1-space-solution
1 void setZeroes(vector<vector<int> > &matrix) { 2 int col0 = 1, rows = matrix.size(), cols = matrix[0].size(); 3 4 for (int i = 0; i < rows; i++) { 5 if (matrix[i][0] == 0) col0 = 0; 6 for (int j = 1; j < cols; j++) 7 if (matrix[i][j] == 0) 8 matrix[i][0] = matrix[0][j] = 0; 9 } 10 11 for (int i = rows - 1; i >= 0; i--) { 12 for (int j = cols - 1; j >= 1; j--) 13 if (matrix[i][0] == 0 || matrix[0][j] == 0) 14 matrix[i][j] = 0; 15 if (col0 == 0) matrix[i][0] = 0; 16 } 17 }
更多讨论
https://discuss.leetcode.com/category/81/set-matrix-zeroes
以上是关于73. Set Matrix Zeroes的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode OJ 73. Set Matrix Zeroes