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?
其实就是斐波那契数列,递推求解便知。
1 class Solution { 2 public: 3 int climbStairs(int n) { 4 if (n==1) return 1; 5 if (n==2) return 2; 6 int a = 1, b = 2; 7 int c; 8 for (int i = 3; i <= n; i++) { 9 c = a + b; 10 a = b; 11 b = c; 12 } 13 return c; 14 } 15 };
第二遍。
1 class Solution { 2 public: 3 int climbStairs(int n) { 4 vector<int> dp(3, 1); 5 for (int i = 2; i <= n; ++i) 6 dp[i % 3] = dp[(i-1) % 3] + dp[(i-2) % 3]; 7 return dp[n % 3]; 8 } 9 };