Problem
Recursive approach
==============
======
There's a staircase with N steps, and you can climb 1 or 2 steps at a time. Given N, write a function that returns the number of unique ways you can climb the staircase. The order of the steps matters.
For example, if N is 4, then there are 5 unique ways:
- 1, 1, 1, 1
- 2, 1, 1
- 1, 2, 1
- 1, 1, 2
- 2, 2
What if, instead of being able to climb 1 or 2 steps at a time, you could climb any number from a set of positive integers X? For example, if X = {1, 3, 5}, you could climb 1, 3, or 5 steps at a time. Generalize your function to take in X.
Solution:
======
==============
public int numSteps(int n){
if(n==0 || n==1) {return 1;}
else{
numSteps(n -1) + numSteps(n-2);
}
}
if X = [I, 3, 5]
=> numSteps(n-1) + numSteps(n-3) + numSteps(n-5);
Dynamic programming
================
public int numSteps(int n){
int res;
int[] nList = new int[n+1];
nList[0] = 1; nList[1] =1;
if(n==0 || n==1) {return 1;}
else{
for(int I=2; i<n;i++){
nList[I] = nList[I-1] + nList[I-2];
}
return nList[I];
}
}
Comments
Post a Comment