地址:http://oj.leetcode.com/problems/climbing-stairs/
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?
思路:fibonacci数列,用递归会超时,直接打表。因为返回的是int型,不用担心用long long int或者上溢出等情况。参考代码:
class Solution {
public:
int climbStairs(int n) {
int arr[100];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
for(int i = 3; i <= n; ++i)
{
arr[i] = arr[i-1]+arr[i-2];
}
return arr[n];
}
};
//SECOND TRIALclass Solution {public :int climbStairs ( int n ) {if ( n <= 0 )return 0 ;int sum = 2 ;vector < int > vec ;vec . push_back ( 1 );while ( sum >= 0 ){vec . push_back ( sum );sum = vec [ vec . size () - 1 ] + vec [ vec . size () - 2 ];}return vec [ n - 1 ];}};
python version:
class Solution :# @param n, an integer# @return an integerdef climbStairs ( self , n ):if n <= 0 :return 0 ;array = [ 1 , 1 , 2 ]while len ( array ) <= n :array . append ( array [ - 1 ] + array [ - 2 ])return array [ n ]