您的位置:首页 > 大数据 > 人工智能

[leetcode] Climbing Stairs

2013-08-14 20:50 316 查看
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?

我会告诉你,我当初考研复试,面试的时候被问了这道题目了吗,当初没答出来,shit,现在看太naive了,斐波那契。

class Solution {
public:
int climbStairs(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(n==0)
return 0;
if(n==1)
return 1;
if(n==2)
return 2;
vector<int> tmp(n);
tmp[0]=1;
tmp[1]=2;
for(int i=2 ; i<n ; i++){
tmp[i]=tmp[i-1]+tmp[i-2];
}
return tmp[n-1];
}
};

几行代码搞定

 当然空间复杂度可以没必要这么高了,因为斐波那契只需要记住以前的两个数而已。所以代码也可以是这样的

class Solution {
public:
int climbStairs(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(n==0)
return 0;
if(n==1)
return 1;
if(n==2)
return 2;
int cn_2=1;
int cn_1=2;
int reval;
for(int i=2 ; i<n ; i++){
reval=cn_2+cn_1;
cn_2=cn_1;
cn_1=reval;
}
return reval;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: