zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    密码朋克的社会实验(一):开灯看暗网
    ThinkPHP5框架缺陷导致远程命令执行(POC整合帖)
    SQL基本注入演示
    从SQL注入到内网漫游
    业务逻辑漏洞探索之敏感信息泄露
    Web安全之XSS Platform搭建及使用实践
    iOS URL Schemes与漏洞的碰撞组合
    phpcms2008远程代码执行漏洞
    使用RSA加密在Python中逆向shell
    源码级调试的XNU内核
  • 原文地址:https://www.cnblogs.com/panini/p/6917467.html
Copyright © 2011-2022 走看看