leetcode Top100(17)矩阵置零

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

示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:

leetcode Top100(17)矩阵置零_第1张图片

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
package TOP11_20;

import java.util.HashSet;
import java.util.Set;

//  矩阵置零
//给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
// 输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
//输出:[[1,0,1],[0,0,0],[1,0,1]]
public class Top18 {
    // 用两个hash表记录行和列为0的数据 然后再修改数组值
    public static void setZeroes(int[][] matrix) {
        Set colZeroSets = new HashSet();
        Set rowZeroSets = new HashSet();
        int row = matrix.length;
        int height = matrix[0].length;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < height; j++) {
                if (matrix[i][j] == 0) {
                    colZeroSets.add(i);
                    rowZeroSets.add(j);
                }
            }
        }

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < height; j++) {
                if (colZeroSets.contains(i) || rowZeroSets.contains(j)) {
                    matrix[i][i] = 0;
                }
            }
        }
    }

    // 直接用第一行和第一列 来记录,但先将第一行和第一列是否有为0的数据记录下来 然后再赋值,最后赋值第一行和第一列
    public static void setZeroes2(int[][] matrix) {
        int row = matrix.length;
        int height = matrix[0].length;
        boolean firstRowHasZero = false;
        boolean firstColHasZero = false;
        for(int i=0 ;i

harryptter / LeetcodeTop100 · GitCode

你可能感兴趣的:(算法,leetcode,矩阵,算法)