当前位置:   article > 正文

算法:矩阵置零_矩阵置零算法封装

矩阵置零算法封装

 题目:

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。

示例 1:

输入: 
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
输出: 
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]
  1. 矩阵置0,要求常数空间
  2. //额外存储空间
  3. class Solution {
  4. public void setZeroes(int[][] matrix) {
  5. //
  6. int R = matrix.length;
  7. //
  8. int C = matrix[0].length;
  9. Set<Integer> rows = new HashSet<Integer>();
  10. Set<Integer> cols = new HashSet<Integer>();
  11. for (int i = 0; i < R; i++) {
  12. for (int j = 0; j < C; j++) {
  13. if (matrix[i][j] == 0) {
  14. //记下对应行和列
  15. rows.add(i);
  16. cols.add(j);
  17. }
  18. }
  19. }
  20. for (int i = 0; i < R; i++) {
  21. for (int j = 0; j < C; j++) {
  22. if (rows.contains(i) || cols.contains(j)) {
  23. matrix[i][j] = 0;
  24. }
  25. }
  26. }
  27. }
  28. }
  29. //O(1)空间的暴力
  30. class Solution {
  31. public void setZeroes(int[][] matrix) {
  32. int MODIFIED = -1000000;
  33. //
  34. int R = matrix.length;
  35. //
  36. int C = matrix[0].length;
  37. for (int r = 0; r < R; r++) {
  38. for (int c = 0; c < C; c++) {
  39. if (matrix[r][c] == 0) {
  40. for (int k = 0; k < C; k++) {
  41. if (matrix[r][k] != 0) {
  42. matrix[r][k] = MODIFIED;
  43. }
  44. }
  45. for (int k = 0; k < R; k++) {
  46. if (matrix[k][c] != 0) {
  47. matrix[k][c] = MODIFIED;
  48. }
  49. }
  50. }
  51. }
  52. }
  53. for (int r = 0; r < R; r++) {
  54. for (int c = 0; c < C; c++) {
  55. if (matrix[r][c] == MODIFIED) {
  56. matrix[r][c] = 0;
  57. }
  58. }
  59. }
  60. }
  61. }
  62. class Solution {
  63. public void setZeroes(int[][] matrix) {
  64. Boolean isCol = false;
  65. int R = matrix.length;
  66. int C = matrix[0].length;
  67. for (int i = 0; i < R; i++) {
  68. if (matrix[i][0] == 0) {
  69. isCol = true;
  70. }
  71. for (int j = 1; j < C; j++) {
  72. if (matrix[i][j] == 0) {
  73. matrix[0][j] = 0;
  74. matrix[i][0] = 0;
  75. }
  76. }
  77. }
  78. for (int i = 1; i < R; i++) {
  79. for (int j = 1; j < C; j++) {
  80. if (matrix[i][0] == 0 || matrix[0][j] == 0) {
  81. matrix[i][j] = 0;
  82. }
  83. }
  84. }
  85. if (matrix[0][0] == 0) {
  86. for (int j = 0; j < C; j++) {
  87. matrix[0][j] = 0;
  88. }
  89. }
  90. if (isCol) {
  91. for (int i = 0; i < R; i++) {
  92. matrix[i][0] = 0;
  93. }
  94. }
  95. }
  96. }

参考链接:https://leetcode-cn.com/problems/set-matrix-zeroes/solution/ju-zhen-zhi-ling-by-leetcode/
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/786243
推荐阅读
相关标签
  

闽ICP备14008679号