题目描述(中等难度)给定一个mxn矩阵,如果一个元素为0,则将其行和列中的所有元素设置为0。请使用原地算法。高级:一个直观的解决方案是使用O(mn)额外空间,但这不是一个好的解决方案。一个简单的改进是使用O(m+n)的额外空间,但这仍然不是最佳解决方案。你能想出一个只使用恒定空间的解决方案吗?示例1:输入:矩阵=[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例2:输入:矩阵=[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]解题思路归零表示如果矩阵中有零,则将其放入同一列设置为0,下图中第二行和第二列为零,红框标识的元素需要设置为零。方案一(空间复杂度O(mn))使用暴力复制一个矩阵备份,遍历复制的矩阵,遇到零时将当前行列归零。为什么要使用复制矩阵?如果直接遍历矩阵,如果第一行第一列都为零,则归零后,所有行都归零,遍历后所有列都会归零。方案二(空间复杂度O(m+n))优化方案一的算法,如果某行或某列为零,我们只需要将该行或某列标记为零即可。用两个数组记录对应的行和列是否出现次数为零。记录结束后,遍历矩阵,如果记录的行或列有零,则将元素重置为零。方案三(空间复杂度O(1))在方案二的基础上,将标注的行或列替换为矩阵上标注的第一列和第一行。遍历第一行,如果为零,则将所有相同的列设置为零。遍历第一列,如果为零,则将所有行设置为零。因为遍历列在遍历行之后,所以遍历行时不能遍历第一列。只能启动一个标记位记录,标记第一行第一列是否为零。总结归零使用空间复杂度分别为O(mn)、O(m+n)、O(1)。如果矩阵中有零,则将行和列设置为零。您需要充分利用第一行和第一列的属性。如果有零,则在第一行和第一列中设置零。对于特殊的第一个位置,您需要添加一个徽标。
