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
n= số hàng,m= số cột.- Tạo ma trận kết quả
reskích thướcn x mkhởi tạo toàn 0. - Tính ma trận chuyển vị
transposeđể dễ kiểm tra cột. - Duyệt từng hàng
i:- Nếu hàng
ikhông chứa 0: - Duyệt từng cột
j:- Nếu cột
j(tức hàngjcủa transpose) không chứa 0: -
res[i][j] = matrix[i][j](giữ giá trị gốc).
- Nếu cột
- Nếu hàng
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).