1. Question
n级台阶,每次可以走一级或两级,问有多少种走法。
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?
2. Solution(O(n))
该问题可用分治法解决。第一步可以走一级或两级,那么相应的问题转化为剩余n-1和n-2级台阶的走法,即
- T(n) = T(n-1) + T(n-2)
这正好也同斐波那契数的计算相同,问题转化为求第n个斐波那契数。
public class Solution { public int climbStairs(int n) { if(n<=2) return n; int p=1; int q=2; for( int i=2; i<n-1; i++ ){ int res; res = p+q; p = q; q = res; } return p+q; } }