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

[LeetCode][智力题]Climbing Stairs

2016-03-21 17:02 323 查看
题目描述:

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?

思路:

前提条件:每次只能跨一阶楼梯或两阶楼梯,求爬完N阶楼梯的种类数

过程:用递归的思想理解,可以发现终止条件是剩下一阶楼梯时只有一种方法,剩下两阶楼梯时有两种方法,递归时返回n-1阶的可能方法和n-2阶的可能方法求和即可,公式和斐波那契数是完全一样的,即第N个斐波那契数对应的就是爬N阶楼梯共有的方法数,由于递归随着输入变量的增加,占用的内存将指数级增长,所以可以凭借斐波那契数的计算公式代替递归计算

代码实现:

public class Solution {
public int climbStairs(int n) {
if(n == 0){
return 0;
}
int ret = 1;
int prev1 = 1,prev2 = 1;
for(int i = 1;i < n; i++){
prev1 = prev2;
prev2 = ret;
ret = prev1 + prev2;
}
return ret;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: