From 7369182fa0c6d544ad57c125fec8d153107d2891 Mon Sep 17 00:00:00 2001 From: tom4649 Date: Tue, 21 Jul 2026 06:25:01 +0900 Subject: [PATCH 1/2] step1,2 --- 0073.Set-Matrix-Zeroes/memo.md | 25 ++++++++++++++++++++++ 0073.Set-Matrix-Zeroes/step1.py | 17 +++++++++++++++ 0073.Set-Matrix-Zeroes/step1_revised.py | 17 +++++++++++++++ 0073.Set-Matrix-Zeroes/step2.py | 28 +++++++++++++++++++++++++ 4 files changed, 87 insertions(+) create mode 100644 0073.Set-Matrix-Zeroes/memo.md create mode 100644 0073.Set-Matrix-Zeroes/step1.py create mode 100644 0073.Set-Matrix-Zeroes/step1_revised.py create mode 100644 0073.Set-Matrix-Zeroes/step2.py diff --git a/0073.Set-Matrix-Zeroes/memo.md b/0073.Set-Matrix-Zeroes/memo.md new file mode 100644 index 0000000..ffe6e69 --- /dev/null +++ b/0073.Set-Matrix-Zeroes/memo.md @@ -0,0 +1,25 @@ +# 73. Set Matrix Zeroes + +## step1 +空間計算量O(n + m), 時間計算量O(mn)の解法。 + +> A simple improvement uses O(m + n) space, but still not the best solution. +> Could you devise a constant space solution? + +わからない + +## 他の人のコード + +https://leetcode.com/problems/set-matrix-zeroes/solutions/6121398/video-o1-space-use-the-first-row-and-col-1kr7/ + +空間O(1)解法 + +https://github.com/thonda28/leetcode/pull/9 + +> 意味のある変数名にしたいです。num_rowsとかでしょうか? + +問題文にあわせて m, nにしたがこちらの方がわかりやすいかもしれない + +> 0行目と0列目のフラグをそれぞれ用意しなくても、matrix[0][0]をどちらかとみなせますね + +読みにくくなると思うので二つフラグを持たせる方針でもよいのでは、と個人的には思う diff --git a/0073.Set-Matrix-Zeroes/step1.py b/0073.Set-Matrix-Zeroes/step1.py new file mode 100644 index 0000000..a146025 --- /dev/null +++ b/0073.Set-Matrix-Zeroes/step1.py @@ -0,0 +1,17 @@ +class Solution: + def setZeroes(self, matrix: list[list[int]]) -> None: + row_with_zero = set() + column_with_zero = set() + + for index_row, row in enumerate(matrix): + for index_column, value in enumerate(row): + if value == 0: + row_with_zero.add(index_row) + column_with_zero.add(index_column) + + for index_row, row in enumerate(matrix): + if index_row in row_with_zero: + row[:] = [0] * len(row) + continue + for index_column in column_with_zero: + row[index_column] = 0 diff --git a/0073.Set-Matrix-Zeroes/step1_revised.py b/0073.Set-Matrix-Zeroes/step1_revised.py new file mode 100644 index 0000000..54427ab --- /dev/null +++ b/0073.Set-Matrix-Zeroes/step1_revised.py @@ -0,0 +1,17 @@ +class Solution: + def setZeroes(self, matrix: list[list[int]]) -> None: + row_with_zero = set() + column_with_zero = set() + + for r, row in enumerate(matrix): + for c, value in enumerate(row): + if value == 0: + row_with_zero.add(r) + column_with_zero.add(c) + + for r, row in enumerate(matrix): + if r in row_with_zero: + row[:] = [0] * len(row) + continue + for c in column_with_zero: + row[c] = 0 diff --git a/0073.Set-Matrix-Zeroes/step2.py b/0073.Set-Matrix-Zeroes/step2.py new file mode 100644 index 0000000..7b9d0c9 --- /dev/null +++ b/0073.Set-Matrix-Zeroes/step2.py @@ -0,0 +1,28 @@ +class Solution: + def setZeroes(self, matrix: list[list[int]]) -> None: + if not matrix: + return + + m = len(matrix) + n = len(matrix[0]) + + first_row_has_zero = 0 in matrix[0] + first_column_has_zero = any(matrix[r][0] == 0 for r in range(m)) + + for r in range(1, m): + for c in range(1, n): + if matrix[r][c] == 0: + matrix[r][0] = 0 + matrix[0][c] = 0 + + for r in range(1, m): + for c in range(1, n): + if matrix[r][0] == 0 or matrix[0][c] == 0: + matrix[r][c] = 0 + + if first_row_has_zero: + matrix[0] = [0] * n + + if first_column_has_zero: + for r in range(m): + matrix[r][0] = 0 From a642f2a0dd73701aff7f3a0449648e97aeced099 Mon Sep 17 00:00:00 2001 From: tom4649 Date: Tue, 21 Jul 2026 22:24:29 +0900 Subject: [PATCH 2/2] Add suggested changes --- 0073.Set-Matrix-Zeroes/step2_revised.py | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 0073.Set-Matrix-Zeroes/step2_revised.py diff --git a/0073.Set-Matrix-Zeroes/step2_revised.py b/0073.Set-Matrix-Zeroes/step2_revised.py new file mode 100644 index 0000000..a9cfdc0 --- /dev/null +++ b/0073.Set-Matrix-Zeroes/step2_revised.py @@ -0,0 +1,28 @@ +class Solution: + def setZeroes(self, matrix: list[list[int]]) -> None: + if not matrix: + return + + m = len(matrix) + n = len(matrix[0]) + + first_row_has_zero = 0 in matrix[0] + first_column_has_zero = any(matrix[r][0] == 0 for r in range(m)) + + for r in range(1, m): + for c in range(1, n): + if matrix[r][c] == 0: + matrix[r][0] = 0 + matrix[0][c] = 0 + + for r in range(1, m): + for c in range(1, n): + if matrix[r][0] == 0 or matrix[0][c] == 0: + matrix[r][c] = 0 + + if first_row_has_zero: + matrix[0][:] = [0] * n + + if first_column_has_zero: + for r in range(m): + matrix[r][0] = 0