每日一题 2019 - 04 - 08
题目:
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place.
Example 1:
1 | Input: |
Example 2:
1 | Input: |
Follow up:
- A straight forward solution using O(m**n) space is probably a bad idea.
- A simple improvement uses O(m + n) space, but still not the best solution.
- Could you devise a constant space solution?
解法:
这个题需要使用 in-place算法进行求解,这个算法的思路也即牺牲时间来提高空间复杂度的有效性,所以可以考虑使用多次循环来解决问题,思路如下:
- 使用第一行第一列的元素来记录下需要置零的行和列,当然第一行第一列自身也需要进行判断需不需要置零
- 先从第二行第二列开始遍历整体元素,如果
matrix[i][j]
为 0 ,那么需要把第 i 行置零,第 j 列置零,这时候需要将matrix[i][0]
置零,matrix[0][j]
置零 - 遍历第一行的所有元素,如果遇到 0 ,该元素处的这一列全部置 0
- 遍历第一列的所有元素,如果遇到 0 ,该元素处的这一行全部置 0
- 最后根据第一步的判断情况,决定是否需要对第一行第一列所有元素置零
代码:
1 | class Solution { |