From 5a2156d0ce402ec5352706111d33f2cba30215f2 Mon Sep 17 00:00:00 2001 From: sidaksohi <31377210+sidaksohi@users.noreply.github.com> Date: Sun, 22 Aug 2021 15:23:32 -0700 Subject: [PATCH 1/3] Added climbing-stairs solution, with description --- dynamic_programming/climbing-stairs.rb | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 dynamic_programming/climbing-stairs.rb diff --git a/dynamic_programming/climbing-stairs.rb b/dynamic_programming/climbing-stairs.rb new file mode 100644 index 0000000..8b510fe --- /dev/null +++ b/dynamic_programming/climbing-stairs.rb @@ -0,0 +1,58 @@ +#You are climbing a staircase. It takes n steps to reach the top. +#Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? + +#Example 1: +#Input: n = 2 +#Output: 2 +#Explanation: There are two ways to climb to the top. +#1. 1 step + 1 step +#2. 2 steps + +#Example 2: +#Input: n = 3 +#Output: 3 +#Explanation: There are three ways to climb to the top. +#1. 1 step + 1 step + 1 step +#2. 1 step + 2 steps +#3. 2 steps + 1 step + +#Constraints: +#1 <= n <= 45 + + + + +#Dynamic Programming, Recursive Bottom Up Approach - O(n) Time / O(n) Space +#Init memoization hash (only 1 parameter) +#Set base cases which are memo[0] = 1 and memo[1] = 1, since there are only 1 way to get to each stair +#Iterate from 2..n and call recurse(n, memo) for each value n. +#Return memo[n]. + +#recurse(n, memo) - Recurrence Relation is n = (n - 1) + (n - 2) +#return memo[n] if memo[n] exists. +#otherwise, memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo) + + +# @param {Integer} n +# @return {Integer} +def climb_stairs(n) + memo = Hash.new + + memo[0] = 1 + memo[1] = 1 + + return memo[n] if n <= 1 && n >= 0 + + (2..n).each do |n| + recurse(n, memo) + end + + memo[n] +end + + +def recurse(n, memo) + return memo[n] if memo[n] + + memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo) +end \ No newline at end of file From 4a38db07649b2d9cf357a925e19aea26d8bac151 Mon Sep 17 00:00:00 2001 From: sidaksohi <31377210+sidaksohi@users.noreply.github.com> Date: Sun, 22 Aug 2021 15:25:24 -0700 Subject: [PATCH 2/3] Rename climbing-stairs.rb to climbing_stairs.rb --- dynamic_programming/{climbing-stairs.rb => climbing_stairs.rb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename dynamic_programming/{climbing-stairs.rb => climbing_stairs.rb} (99%) diff --git a/dynamic_programming/climbing-stairs.rb b/dynamic_programming/climbing_stairs.rb similarity index 99% rename from dynamic_programming/climbing-stairs.rb rename to dynamic_programming/climbing_stairs.rb index 8b510fe..8b7e26e 100644 --- a/dynamic_programming/climbing-stairs.rb +++ b/dynamic_programming/climbing_stairs.rb @@ -55,4 +55,4 @@ def recurse(n, memo) return memo[n] if memo[n] memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo) -end \ No newline at end of file +end From 70a1b9353a01f5e9dbab3e2d030fb906060f9bab Mon Sep 17 00:00:00 2001 From: sidaksohi <31377210+sidaksohi@users.noreply.github.com> Date: Tue, 24 Aug 2021 18:33:53 -0700 Subject: [PATCH 3/3] Update climbing_stairs.rb --- dynamic_programming/climbing_stairs.rb | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/dynamic_programming/climbing_stairs.rb b/dynamic_programming/climbing_stairs.rb index 8b7e26e..8f058b7 100644 --- a/dynamic_programming/climbing_stairs.rb +++ b/dynamic_programming/climbing_stairs.rb @@ -41,7 +41,7 @@ def climb_stairs(n) memo[0] = 1 memo[1] = 1 - return memo[n] if n <= 1 && n >= 0 + return memo[n] if n == 0 || n == 1 (2..n).each do |n| recurse(n, memo) @@ -56,3 +56,16 @@ def recurse(n, memo) memo[n] = recurse(n - 1, memo) + recurse(n - 2, memo) end + + +puts climb_stairs(2) +# => 2 + +puts climb_stairs(4) +# => 5 + +puts climb_stairs(10) +# => 89 + +puts climb_stairs(45) +# => 1836311903