给定一个矩阵,把零值所在的行和列都置为零。例如:

1 2 3

1 3

1 1 1

操作之后变为

1 3

0 0 0

1 1

方法1:

赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零。额外空间为O(m*n).

方法2:

两个数组,bool[m] 和 bool[n] 分别存某行有零,后者某列有零。之后根据数组值将原矩阵相应位置置零。额外空间O(m + n)。

  1. class Solution {
  2. public:
  3. void setZeroes(vector<vector<int> > &matrix) {
  4. int len1 = matrix.size();
  5. if (len1 == ) return ;
  6. int len2 = matrix[].size();
  7. if (len2 == ) return ;
  8. vector<bool > row(len1), col(len2);
  9. for (int i = ; i < len1; i++)
  10. for (int j = ; j < len2; j++)
  11. {
  12. if (matrix[i][j] == )
  13. {
  14. row[i] = true; col[j] = true;
  15. }
  16. }
  17. for (int i = ; i < len1; i++)
  18. for (int j = ; j < len2; j++)
  19. {
  20. if (row[i] == true)
  21. matrix[i][j] = ;
  22. else if (col[j] == true)
  23. matrix[i][j] = ;
  24. }
  25. return ;
  26. }
  27. };

方法3:(常数额外空间)

1. 找到一个零的位置,把这行这列当做方法2中的两个数组存值。

2. 根据1的位置的所在行和列的值是否有零将矩阵相应位置置零。

3. 再把1中零所在位置的行和列置零。

  1. class Solution {
  2. public:
  3. void setZeroes(vector<vector<int> > &matrix) {
  4. int len1 = matrix.size();
  5. if (len1 == ) return ;
  6. int len2 = matrix[].size();
  7. if (len2 == ) return ;
  8. int row = -, col = -;
  9. for (int i = ; i < len1; i++)
  10. for (int j = ; j < len2; j++)
  11. {
  12. if (matrix[i][j] == )
  13. {
  14. row = i; col = j;
  15. }
  16. }
  17. if (row == -) return;
  18. for (int i = ; i < len1; i++)
  19. for (int j = ; j < len2; j++)
  20. {
  21. if (matrix[i][j] == && i != row && j != col)
  22. {
  23. matrix[i][col] = ;
  24. matrix[row][j] = ;
  25. }
  26. }
  27. for (int i = ; i < len1; i++)
  28. for (int j = ; j < len2; j++)
  29. {
  30. if (i != row && j != col)
  31. {
  32. if (matrix[i][col] == )
  33. matrix[i][j] = ;
  34. else if (matrix[row][j] == )
  35. matrix[i][j] = ;
  36. }
  37. }
  38. int index = -;
  39. while(++index < len1) matrix[index][col] = ;
  40. index = -;
  41. while(++index < len2) matrix[row][index] = ;
  42. return ;
  43. }
  44. };

2015/03/25:

Python:

用第一行和第一列记录这一行和这一列中是否有零,当然,一开始要先用row和col记录第一行和第一列是否有零,最后再根据这个判断是否将第一行第一列置零

  1. class Solution:
  2. # @param matrix, a list of lists of integers
  3. # @return nothing (void), do not return anything, MODIFY matrix IN PLACE.
  4. def setZeroes(self, matrix):
  5. if len(matrix) == 0:
  6. return ;
  7. row, col = 1, 1
  8. for i in range(0, len(matrix)):
  9. if matrix[i][0] == 0:
  10. col = 0
  11. for j in range(0, len(matrix[0])):
  12. if matrix[0][j] == 0:
  13. row = 0
  14.  
  15. for i in range(1, len(matrix)):
  16. for j in range(1, len(matrix[0])):
  17. if matrix[i][j] == 0:
  18. matrix[i][0] = 0
  19. matrix[0][j] = 0
  20. for i in range(1, len(matrix)):
  21. for j in range(1, len(matrix[0])):
  22. if matrix[i][0] == 0 or matrix[0][j] == 0:
  23. matrix[i][j] = 0
  24.  
  25. if col == 0:
  26. for i in range(0, len(matrix)):
  27. matrix[i][0] = 0
  28. if row == 0:
  29. for j in range(0, len(matrix[0])):
  30. matrix[0][j] = 0

leetcode[73] Set Matrix Zeroes 将矩阵置零的更多相关文章

  1. LeetCode 73. Set Matrix Zeros(矩阵赋零)

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click ...

  2. 力扣—set matrix zeroes (矩阵置零) python实现

    题目描述: 中文: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 英文: Given a m x n matrix, if an eleme ...

  3. LeetCode第[73]题(Java):Set Matrix Zeroes(矩阵置0)

    题目:矩阵置0 难度:Easy 题目内容: Given a m x n matrix, if an element is 0, set its entire row and column to 0. ...

  4. [LeetCode] 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. Exampl ...

  5. [LeetCode] 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. Follow ...

  6. Leetcode#73 Set Matrix Zeroes

    原题地址 用矩形的第一行和第一列充当mask 代码: void setZeroes(vector<vector<int> > &matrix) { ].empty()) ...

  7. 73. Set Matrix Zeroes 把矩阵同一行列的元素都改成0

    [抄题]: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. ...

  8. LeetCode:矩阵置零【73】

    LeetCode:矩阵置零[73] 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   ...

  9. Java实现 LeetCode 73 矩阵置零

    73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ...

随机推荐

  1. SQL开发中容易忽视的一些小地方(五)

    原文:SQL开发中容易忽视的一些小地方(五) 背景: 索引分类:众所周知,索引分为聚集索引和非聚集索引. 索引优点:加速数据查询. 问题:然而我们真的清楚索引的应用吗?你写的查询语句是否能充分应用上索 ...

  2. HDU 3788 和九度OJ 1006测试数据是不一样的

    ZOJ问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. Online网站集

    http://tool.oschina.net/apidocs/    在线工具(IT技术工具)

  4. hdu4419 Colourful Rectangle 12年杭州网络赛 扫描线+线段树

    题意:给定n个矩形,每个矩形有一种颜色,RGB中的一种.相交的部分可能为RG,RB,GB,RGB,问这n个矩形覆盖的面积中,7种颜色的面积分别为多少 思路:把x轴离散化做扫描线,线段树维护一个扫描区间 ...

  5. Android内置下拉刷新组件SwipeRefreshLayout

    也许下拉刷新之前,你可能会使用一些第三方的开源库,例如PullToRefresh, ActionBar-PullToRefresh等待,但现在有的正式组成部分---SwipeRefreshLayout ...

  6. ubuntu分屏终端

    一:更新source 列表: 将/etc/apt/sources.list的镜像源改为网易源:http://mirrors.163.com/ubuntu/dists/ deb http://mirro ...

  7. Do a “git export” (like “svn export”)?(转)

    Probably the simplest way to achieve this is with git archive. If you really need just the expanded ...

  8. oracle 11g 自己主动调整

    --:自己主动调教计划 begin   dbms_workload_repository.create_snapshot(); end; select /*+ result_cache */ coun ...

  9. Android - 错: java.lang.IllegalStateException: Already attached

    错: java.lang.IllegalStateException: Already attached 本文地址: http://blog.csdn.net/caroline_wendy 可能原因: ...

  10. Android学习----异常(2):Please ensure that adb is correctly located at &#39; ... &#39;

    打开任务管理器,在后台进程中找到 kadb,结束这个进程,重新启动eclipse.