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?

这题实际上和费波那契数列很像。上n层楼梯的方法总数s(n),可以根据是否会踏上第n-1层楼梯从而分成两类方法:第一种是先上n-1层,最后再上1层,对应s(n-1)*1种方法;第二种是先上n-2层,最后直接上2层,对应s(n-2)*1种方法。故最后s(n)=s(n-1)+s(n-2)。

另外此题不能用简单的递归函数计算,因为leetcode会报超时。所以采用DP,即保存子问题计算结果的思想,避免冗余计算。

int climbStairs(int n) {
	int a[1000] = {
		0,1,2
	};
	int i = 3;
	if(n == 1)
		return a[1];
	if(n == 2)
		return a[2];
	else{
		while(i <= n){
			a[i] = a[i - 1] + a[i - 2];
			i++;
		}
		return a[n];
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值