LeetCode -Hot100 - 73. 矩阵置零

打印 上一主题 下一主题

主题 1017|帖子 1017|积分 3051

媒介

本专栏重要通过“LeetCode 热题100”,来捡起本身本科阶段的算法知识与本领。语言重要使用c++/java。假如同样正在练习LeetCode 热题100的朋侪欢迎关注或订阅本专栏。有疑问欢迎留言交换~
标题描述

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

思绪

最开始我不知道什么是“原地算法”。gpt给的答复是:原地算法(In-place algorithm)是指在实行算法时不需要额外的存储空间,大概只需要常数级别的额外存储空间的算法。换句话说,算法的输入数据被直接修改以产生输出效果,而不需要创建额外的数据结构来存储输出效果或中心效果。
假如只是不用额外的数组来存储二维数组,不难。只要发现一个0然后对当前的数组的行列赋值0就好,但需要注意不要把后面没有开始判定的数字给赋值0了。既然怕前面的赋值操纵影响后面的数组,其实完全可以用数组记载下来哪些行和列要归0。然后末了同一来赋值0就好。
Java代码如下:
  1. class Solution {
  2.     public void setZeroes(int[][] matrix) {
  3.         int m = matrix.length;
  4.         int n = matrix[0].length;
  5.         boolean[] row = new boolean[m];
  6.         boolean[] col = new boolean[n];
  7.         for (int i = 0; i < m; i++) {
  8.             for (int j = 0; j < n; j++) {
  9.                 //发现0
  10.                 if (matrix[i][j] == 0) {
  11.                     row[i] = col[j] = true;//只需要记录下来这些row 和 col为true
  12.                 }
  13.             }
  14.         }
  15.         for (int i = 0; i < m; i++) {
  16.             for (int j = 0; j < n; j++) {
  17.                 if (row[i] == true || col[j] == true) {
  18.                     matrix[i][j] = 0;
  19.                 }
  20.             }
  21.         }
  22.     }
  23. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表