# 矩阵置零

<p>给定一个 <code><em>m</em> x <em>n</em></code> 的矩阵，如果一个元素为 <strong>0 </strong>，则将其所在行和列的所有元素都设为 <strong>0</strong> 。请使用 <strong><a href="http://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95" target="_blank">原地</a></strong> 算法<strong>。</strong></p><p><strong>进阶：</strong></p><ul>	<li>一个直观的解决方案是使用  <code>O(<em>m</em><em>n</em>)</code> 的额外空间，但这并不是一个好的解决方案。</li>	<li>一个简单的改进方案是使用 <code>O(<em>m</em> + <em>n</em>)</code> 的额外空间，但这仍然不是最好的解决方案。</li>	<li>你能想出一个仅使用常量空间的解决方案吗？</li></ul><p> </p><p><strong>示例 1：</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0073.Set%20Matrix%20Zeroes/images/mat1.jpg" style="width: 450px; height: 169px;" /><pre><strong>输入：</strong>matrix = [[1,1,1],[1,0,1],[1,1,1]]<strong><br />输出：</strong>[[1,0,1],[0,0,0],[1,0,1]]</pre><p><strong>示例 2：</strong></p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/0000-0099/0073.Set%20Matrix%20Zeroes/images/mat2.jpg" style="width: 450px; height: 137px;" /><pre><strong>输入：</strong>matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]<strong><br />输出：</strong>[[0,0,0,0],[0,4,5,0],[0,3,1,0]]</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>m == matrix.length</code></li>	<li><code>n == matrix[0].length</code></li>	<li><code>1 <= m, n <= 200</code></li>	<li><code>-2<sup>31</sup> <= matrix[i][j] <= 2<sup>31</sup> - 1</code></li></ul>

以下程序实现了这一功能，请你填补空白处内容：

```cpp
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    void setZeroes(vector<vector<int>> &matrix)
    {
        int i = matrix.size();
        int j = matrix[0].size();
        vector<int> hang(i);
        vector<int> lie(j);
        for (int m = 0; m < i; m++)
        {
            for (int n = 0; n < j; n++)
            {
                if (!matrix[m][n])
                {
                    hang[m] = lie[n] = true;
                }
            }
        }
        for (int m = 0; m < i; m++)
        {
            for (int n = 0; n < j; n++)
            {
				__________________;
            }
        }
    }
};
```

## template

```cpp
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    void setZeroes(vector<vector<int>> &matrix)
    {
        int i = matrix.size();
        int j = matrix[0].size();
        vector<int> hang(i);
        vector<int> lie(j);
        for (int m = 0; m < i; m++)
        {
            for (int n = 0; n < j; n++)
            {
                if (!matrix[m][n])
                {
                    hang[m] = lie[n] = true;
                }
            }
        }
        for (int m = 0; m < i; m++)
        {
            for (int n = 0; n < j; n++)
            {
                if (hang[m] || lie[n])
                    matrix[m][n] = 0;
            }
        }
    }
};
```

## 答案

```cpp
if (hang[m] || lie[n])
	matrix[m][n] = 0;
```

## 选项

### A

```cpp
if (hang[m] && lie[n])
	matrix[m][n] = 0;
```

### B

```cpp
if (hang[m] >= lie[n])
	matrix[m][n] = 0;
```

### C

```cpp
if (hang[m] <= lie[n])
	matrix[m][n] = 0;
```