小黑享受思考心流: 73. 矩阵置零

发布于:2025-05-01 ⋅ 阅读:(20) ⋅ 点赞:(0)

小黑代码

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        items = []
        m = len(matrix)
        n = len(matrix[0])
        for i in range(m):
            for j in range(n):
                if not matrix[i][j]:
                    items.append((i, j))
        for item in items:
            x = item[0]
            y = item[1]
            for i in range(n):
                matrix[x][i] = 0
            for j in range(m):
                matrix[j][y] = 0
        return matrix

在这里插入图片描述

标记变量

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        # 行和列数
        m = len(matrix)
        n = len(matrix[0])
        # 判断第一行和第一列是否有0
        has_zero_row = False
        has_zero_column = False
        for i in range(m):
            if not matrix[i][0]:
                has_zero_row = True
                break
        for i in range(n):
            if not matrix[0][i]:
                has_zero_column = True
                break
        # 开始通过第一行和第一列记录该行是否置零
        for i in range(1, m):
            for j in range(1, n):
                if not matrix[i][j]:
                    matrix[i][0] = 0
                    matrix[0][j] = 0
        # 开始进行置零
        for i in range(1, m):
            if not matrix[i][0]:
                for t in range(1, n):
                    matrix[i][t] = 0
        for i in range(1,n):
            if not matrix[0][i]:
                for t in range(1,m):
                    matrix[t][i] = 0
        # 判断第一行和第一列是否需要置零
        if has_zero_row:
            for i in range(m):
                matrix[i][0] = 0
        if has_zero_column:
            for i in range(n):
                matrix[0][i] = 0
        return matrix

在这里插入图片描述

C#练习

public class Solution {
    public void SetZeroes(int[][] matrix) {
        int m = matrix.Length;
        int n = matrix[0].Length;
        // 标记变量
        bool rowZero = false;
        bool columnZero = false;
        // 计算标记变量
        for(int i = 0; i < m; i++){
            if(matrix[i][0]==0){
                rowZero = true;
                break;
            }
        }
        for(int j = 0; j < n; j++){
            if(matrix[0][j]==0){
                columnZero = true;
                break;
            }
        }
        // 开始计算为零的行列
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                if(matrix[i][j]==0){
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        // 开始置零
        for(int i = 1; i < m; i++){
            if(matrix[i][0]==0){
                for(int j = 1; j < n; j++){
                    matrix[i][j] = 0;
                }
            }
        }
        for(int j = 1; j < n; j++){
            if(matrix[0][j]==0){
                for(int i = 1; i < m; i++){
                    matrix[i][j] = 0;
                }
            }
        }
        // 判断第一行和第一列是否需要置零
        if(rowZero){
            for(int i = 0; i < m; i++){
                matrix[i][0] = 0;
            }
        }
        if(columnZero){
            for(int j = 0; j < n; j++){
                matrix[0][j] = 0;
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到