public class Solution { public int ClimbStairs(int n) { //递归方法,效率低 //if (n <= 0) //{ // return 0; //} //else if (n == 1) //{ // return 1; //} //else if (n == 2) //{ // return 2; //} //else //{ // return ClimbStairs(n - 1) + ClimbStairs(n - 2); //} //非递归方法 if (n <= 0) { return 0; } else if (n == 1) { return 1; } else if (n == 2) { return 2; } else { int[] ary = new int[n]; ary[0] = 1; ary[1] = 2; for (int i = 2; i < n; i++) { ary[i] = ary[i - 1] + ary[i - 2]; } return ary[n - 1]; } }}
C++版本:
class Solution {public: int climbStairs(int n) { vector step; step.push_back(1);//只有一级台阶,1种走法 step.push_back(2);//有两级台阶,2种走法 for (int i = 2; i <= n; i++) { //之后每一级台阶,有i-1台阶的走法+i-2台阶的走法之和 step.push_back(step[i - 1] + step[i - 2]); } return step[n - 1]; //4 1+1+1+1, // 1+1+2,1+2+1,2+1+1, // 2+2 //5 1+1+1+1+1 // 1+1+1+2,1+1+2+1,1+2+1+1,2+1+1+1 // 1+2+2,2+1+2,2+2+1, }};