当前位置:   article > 正文

lc 73 矩阵置零(Java版)_矩阵置零 java

矩阵置零 java

73. 矩阵置零

中等

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

主要是不可以使用额外的空间,那么难度还是有点,关键的一步是

将中间所有的0全部移动到最左边和最上面。

代码如下:

  1. package com.codeking.lc;
  2. import java.util.Arrays;
  3. /**
  4. * @author xiongjl
  5. * @since 2023/8/6 14:25
  6. */
  7. public class lc73 {
  8. public static void main(String[] args) {
  9. new lc73().setZeroes(new int[][]{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}});
  10. }
  11. public void setZeroes(int[][] matrix) {
  12. // 这个题目很关键的一个做法就是最上面的一行和最左边的一行用来记录0
  13. boolean colZero = false, rowZero = false;
  14. if (matrix[0][0] == 0) {
  15. colZero = true;
  16. rowZero = true;
  17. } else {
  18. for (int i = 1; i < matrix[0].length; i++) {
  19. if (matrix[0][i] == 0) {
  20. rowZero = true;
  21. break;
  22. }
  23. }
  24. for (int i = 1; i < matrix.length; i++) {
  25. if (matrix[i][0] == 0) {
  26. colZero = true;
  27. break;
  28. }
  29. }
  30. }
  31. // 将0全部移动到边界
  32. for (int i = 1; i < matrix.length; i++) {
  33. for (int j = 1; j < matrix[0].length; j++) {
  34. if (matrix[i][j] == 0) {
  35. matrix[0][j] = 0;
  36. matrix[i][0] = 0;
  37. }
  38. }
  39. }
  40. // 先处理列
  41. for (int i = 1; i < matrix[0].length; i++) {
  42. if (matrix[0][i] == 0) {
  43. for (int j = 1; j < matrix.length; j++) {
  44. matrix[j][i] = 0;
  45. }
  46. }
  47. }
  48. // 再处理行
  49. for (int i = 1; i < matrix.length; i++) {
  50. if (matrix[i][0] == 0) {
  51. for (int j = 1; j < matrix[0].length; j++) {
  52. matrix[i][j] = 0;
  53. }
  54. }
  55. }
  56. // 处理最外层
  57. if (rowZero) {
  58. Arrays.fill(matrix[0], 0);
  59. }
  60. if (colZero) {
  61. for (int i = 0; i < matrix.length; i++) {
  62. matrix[i][0] = 0;
  63. }
  64. }
  65. // 打印
  66. /*for (int[] ints : matrix) {
  67. for (int j = 0; j < matrix[0].length; j++) {
  68. System.out.print(ints[j] + " ");
  69. }
  70. System.out.println();
  71. }*/
  72. }
  73. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号