From f6f0de711539686c67f9d55034cef5f95d2b4ebc Mon Sep 17 00:00:00 2001 From: Hiro Funatsuka Date: Sun, 3 May 2026 17:03:08 +0900 Subject: [PATCH] Solve paint fence --- 276_paint_fence/.DS_Store | Bin 0 -> 6148 bytes 276_paint_fence/problem.md | 1 + 276_paint_fence/step1.md | 33 +++++++++++++++++++++++++++++++++ 276_paint_fence/step2.md | 33 +++++++++++++++++++++++++++++++++ 276_paint_fence/step3.md | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 276_paint_fence/.DS_Store create mode 100644 276_paint_fence/problem.md create mode 100644 276_paint_fence/step1.md create mode 100644 276_paint_fence/step2.md create mode 100644 276_paint_fence/step3.md diff --git a/276_paint_fence/.DS_Store b/276_paint_fence/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 int: + # write your code here + if n == 0: + return 0 + if n == 1: + return k + if n == 2: + return k * k + return num_ways(n - 1) * (k - 1) + num_ways(n - 2) * (k - 1) +``` + +時間計算量: $O(2^n)$ + +空間計算量:$O(n)$ diff --git a/276_paint_fence/step2.md b/276_paint_fence/step2.md new file mode 100644 index 0000000..ffa89ff --- /dev/null +++ b/276_paint_fence/step2.md @@ -0,0 +1,33 @@ +# Step 2 + +- 再帰をなくして計算量を改善する + +```python +class Solution: + """ + @param n: non-negative integer, n posts + @param k: non-negative integer, k colors + @return: an integer, the total number of ways + """ + def num_ways(self, n: int, k: int) -> int: + # write your code here + if n == 0: + return 0 + if n == 1: + return k + if n == 2: + return k * k + num_ways_prev_2 = k + num_ways_prev_1 = k * k + + for i in range(2, n): + tmp = num_ways_prev_1 + num_ways_prev_1 = (k - 1) * (num_ways_prev_1 + num_ways_prev_2) + num_ways_prev_2 = tmp + return num_ways_prev_1 + +``` + +時間計算量: $O(n)$ + +空間計算量: $O(1)$ diff --git a/276_paint_fence/step3.md b/276_paint_fence/step3.md new file mode 100644 index 0000000..8584db8 --- /dev/null +++ b/276_paint_fence/step3.md @@ -0,0 +1,32 @@ +# Step 3 + +```python +class Solution: + """ + @param n: non-negative integer, n posts + @param k: non-negative integer, k colors + @return: an integer, the total number of ways + """ + def num_ways(self, n: int, k: int) -> int: + # write your code here + if n == 0: + return 0 + if n == 1: + return k + if n == 2: + return k * k + num_ways_prev_2 = k + num_ways_prev_1 = k * k + + for i in range(2, n): + tmp = num_ways_prev_1 + num_ways_prev_1 = (k - 1) * (num_ways_prev_1 + num_ways_prev_2) + num_ways_prev_2 = tmp + return num_ways_prev_1 +``` + +1回目: 1分 17秒 + +2回目: 1分 20秒 + +3回目: 1分 16秒