diff --git a/70_climbing_stairs/memo.md b/70_climbing_stairs/memo.md new file mode 100644 index 0000000..2e083f8 --- /dev/null +++ b/70_climbing_stairs/memo.md @@ -0,0 +1,19 @@ +# 70. Climbing Stairs + +https://leetcode.com/problems/climbing-stairs/ + +## Comments + +### step1 + +* dp や再帰で解けるだろう +* いくつか試すと、直近 2 つだけ持っていればよい + +### step2 + +* フィボナッチっぽく実装するならこのあたりとか +* for のループ回数とか境界条件をちゃんと確認する必要はある + +### step3 + +* 簡単な問題なので省略。ただし LeetCode に色々別解はある。 diff --git a/70_climbing_stairs/step1.cpp b/70_climbing_stairs/step1.cpp new file mode 100644 index 0000000..a9f31e9 --- /dev/null +++ b/70_climbing_stairs/step1.cpp @@ -0,0 +1,20 @@ +class Solution { +public: + int climbStairs(int n) { + if (n <= 1) { + return n; + } + int ways; + // Starting from ways(0) = 0 + int two_steps_before = 0; + // ways(1) = 1 + int one_step_before = 1; + // Run n times. + for (int i = 0; i < n; ++i) { + ways = two_steps_before + one_step_before; + two_steps_before = one_step_before; + one_step_before = ways; + } + return ways; + } +}; diff --git a/70_climbing_stairs/step2.cpp b/70_climbing_stairs/step2.cpp new file mode 100644 index 0000000..f397e0e --- /dev/null +++ b/70_climbing_stairs/step2.cpp @@ -0,0 +1,16 @@ +class Solution { +public: + int climbStairs(int n) { + if (n <= 1) { + return n; + } + int first = 1; + int second = 1; + for (int i = 2; i <= n; ++i) { + int third = first + second; + first = second; + second = third; + } + return second; + } +}; diff --git a/70_climbing_stairs/step3.cpp b/70_climbing_stairs/step3.cpp new file mode 100644 index 0000000..e69de29