Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình chuyển toàn bộ hàng và cột thành 0 tại vị trí có giá trị 0 trong ma trận Python

Mô tả bài toán

Cho ma trận 2D. Với mỗi ô giá trị 0, đặt toàn bộ hàng và cột chứa ô đó thành 0. Trả về ma trận kết quả.

Ví dụ: ma trận đầu vào có 0 tại hàng 0, 2, 3 và cột 0, 1, 2 → ma trận kết quả toàn 0 ở các hàng/cột đó.

Thuật toán

  1. n = số hàng, m = số cột.
  2. Tạo ma trận kết quả res kích thước n x m khởi tạo toàn 0.
  3. Tính ma trận chuyển vị transpose để dễ kiểm tra cột.
  4. Duyệt từng hàng i:
    • Nếu hàng i không chứa 0:
    • Duyệt từng cột j:
      • Nếu cột j (tức hàng j của transpose) không chứa 0:
      • res[i][j] = matrix[i][j] (giữ giá trị gốc).

Triển khai Python


class Solution:
    def solve(self, matrix):
        n, m = len(matrix), len(matrix[0])
        res = [[0 for _ in range(m)] for _ in range(n)]
        transpose = [list(row) for row in zip(*matrix)]
        
        for i in range(n):
            if 0 not in matrix[i]:
                for j in range(m):
                    if 0 not in transpose[j]:
                        res[i][j] = matrix[i][j]
        return res

# Test
ob = Solution()
matrix = [
    [6, 0, 0, 6, 9],
    [4, 9, 9, 4, 8],
    [0, 8, 3, 4, 2],
    [9, 0, 7, 8, 3],
    [5, 2, 9, 6, 8]
]
print(ob.solve(matrix))

Đầu vào:


matrix = [
    [6, 0, 0, 6, 9],
    [4, 9, 9, 4, 8],
    [0, 8, 3, 4, 2],
    [9, 0, 7, 8, 3],
    [5, 2, 9, 6, 8]
]

Đầu ra:


[
    [0, 0, 0, 0, 0],
    [0, 0, 0, 4, 8],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 6, 8]
]

Giải thích

  • Hàng 0, 2, 3 có chứa 0 → toàn bộ hàng thành 0.
  • Cột 0, 1, 2 có chứa 0 → toàn bộ cột thành 0.
  • Chỉ các ô không nằm trong hàng/cột có 0 mới giữ giá trị gốc (ví dụ: hàng 1 cột 3,4 và hàng 4 cột 3,4).