You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
This is a easy DP problem. The formula is sol[n] = sol[n-1] + sol[n-2]. For the nth stair, we can get there from (n-1)th stair or from (n-2)th stair.
C++ Code:
/* func: climb_stair * goal: to find out how many ways we can use to climb to the top * @param n: number of stairs * return: number of ways */ /* * classical DP problem: sol[n] = sol[n-1] + sol[n-2] * complexity: time O(n), space O(n) */ int climb_stair(int n){ if(n <= 1){ return 1; }else if( n == 2){ return 2; }else{ int *sol = new int[n]; sol[0] = 1; sol[1] = 2; for(int i = 2; i < n; ++i){ sol[i] = sol[i-1] + sol[i-2]; } int result = sol[n-1]; delete [] sol; return result; } }
Python Code:
# func: find the total number of distinct ways to get to the top # @param n: number of stairs # @return: total number of ways def climb_stair(n): if n <= 1: return 1 elif n == 2: return 2 else: solution = [1,2] for _ in xrange(2, n): solution.append(solution[-1] + solution[-2]) return solution[-1]
No comments:
Post a Comment