From 3b1119f66e7794eab701fe2b6c4081b943c97c1c Mon Sep 17 00:00:00 2001 From: Hiro Funatsuka Date: Sun, 10 May 2026 11:58:57 +0900 Subject: [PATCH 1/2] Solve unique paths --- 62_unique_paths/problem.md | 1 + 62_unique_paths/step1.md | 17 +++++++++++++++++ 62_unique_paths/step2.md | 20 ++++++++++++++++++++ 62_unique_paths/step3.md | 19 +++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 62_unique_paths/problem.md create mode 100644 62_unique_paths/step1.md create mode 100644 62_unique_paths/step2.md create mode 100644 62_unique_paths/step3.md diff --git a/62_unique_paths/problem.md b/62_unique_paths/problem.md new file mode 100644 index 0000000..3119501 --- /dev/null +++ b/62_unique_paths/problem.md @@ -0,0 +1 @@ +## 問題: [62. Unique Paths](https://leetcode.com/problems/unique-paths/description/) diff --git a/62_unique_paths/step1.md b/62_unique_paths/step1.md new file mode 100644 index 0000000..3847198 --- /dev/null +++ b/62_unique_paths/step1.md @@ -0,0 +1,17 @@ +# Step 1 + +- ある地点$grid[i][j]$に辿り着けるルートの数は$grid[i - 1][j]$に辿り着くルートの数と$grid[i][j - 1]$に辿り着くルートの数の和である + +```python +class Solution: + def uniquePaths(self, m: int, n: int) -> int: + grid = [[1] * n] + [[1] + [0] * (n - 1)] * (m - 1) + for i in range(1, m): + for j in range(1, n): + grid[i][j] = grid[i - 1][j] + grid[i][j - 1] + return grid[m - 1][n - 1] +``` + +時間計算量: $O(m \times n)$ + +空間計算量: $O(m \times n)$ diff --git a/62_unique_paths/step2.md b/62_unique_paths/step2.md new file mode 100644 index 0000000..fb131f8 --- /dev/null +++ b/62_unique_paths/step2.md @@ -0,0 +1,20 @@ +# Step 2 + +- 空間計算量を改善する + +```python +class Solution: + def uniquePaths(self, m: int, n: int) -> int: + prev_row = [1] * n + for i in range(1, m): + new_row = [1] + [0] * (n - 1) + for j in range(1, n): + new_row[j] = new_row[j - 1] + prev_row[j] + prev_row = new_row + return prev_row[n - 1] + +``` + +時間計算量: $O(m \times n)$ + +空間計算量: $O(n)$ diff --git a/62_unique_paths/step3.md b/62_unique_paths/step3.md new file mode 100644 index 0000000..de1f188 --- /dev/null +++ b/62_unique_paths/step3.md @@ -0,0 +1,19 @@ +# Step 3 + +```python +class Solution: + def uniquePaths(self, m: int, n: int) -> int: + prev_row = [1] * n + for i in range(1, m): + new_row = [1] + [0] * (n - 1) + for j in range(1, n): + new_row[j] = new_row[j - 1] + prev_row[j] + prev_row = new_row + return prev_row[n - 1] +``` + +1回目: 1分 20秒 + +2回目: 1分 6秒 + +3回目: 1分 6秒 From 0ecd0f3eab61902956969abf9443dfa2ba9b63c1 Mon Sep 17 00:00:00 2001 From: Hiro Funatsuka Date: Sun, 10 May 2026 13:37:55 +0900 Subject: [PATCH 2/2] Refactor code --- 62_unique_paths/step2.md | 8 +++----- 62_unique_paths/step3.md | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/62_unique_paths/step2.md b/62_unique_paths/step2.md index fb131f8..c8177ee 100644 --- a/62_unique_paths/step2.md +++ b/62_unique_paths/step2.md @@ -5,13 +5,11 @@ ```python class Solution: def uniquePaths(self, m: int, n: int) -> int: - prev_row = [1] * n + row = [1] * n for i in range(1, m): - new_row = [1] + [0] * (n - 1) for j in range(1, n): - new_row[j] = new_row[j - 1] + prev_row[j] - prev_row = new_row - return prev_row[n - 1] + row[j] += row[j - 1] + return row[n - 1] ``` diff --git a/62_unique_paths/step3.md b/62_unique_paths/step3.md index de1f188..9a64dfa 100644 --- a/62_unique_paths/step3.md +++ b/62_unique_paths/step3.md @@ -3,13 +3,11 @@ ```python class Solution: def uniquePaths(self, m: int, n: int) -> int: - prev_row = [1] * n + row = [1] * n for i in range(1, m): - new_row = [1] + [0] * (n - 1) for j in range(1, n): - new_row[j] = new_row[j - 1] + prev_row[j] - prev_row = new_row - return prev_row[n - 1] + row[j] += row[j - 1] + return row[n - 1] ``` 1回目: 1分 20秒