leetcode-climbStairs

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?

如题:climbStair(n)= climbStair(n-1) + climbStair(n-2) ,这是什么?斐波那契数列啊,竟然没反应上来,随后就递归的写了斐波那契数列的实现,当然错啦,不是在算法,而是递归结构不对,才当n=44,就time limit exceeded!

翻了一下答案,应用迭代计算结果,并把每种结果存入数组,最后返回a[n],很好。。。

照例先上代码

<pre name="code" class="java">public int climbStair(int n){
 
//递归写法
		<span style="font-family: Arial, Helvetica, sans-serif;">if(n==0||n<0){</span>
			return 0;		}
		if(n==1){return 1;}
		if(n==2){return 2;}
		return climbStair(n-1) + climbStair(n-2);
	}
	public int climbStairs(int n){
<span style="white-space:pre">	</span>//迭代,数组存储写法	
	int[] a = new int [n+1];
		a[0] = 1;
		a[1] = 1;
		
		for(int i=2;i<a.length;i++){
			a[i] = a[i-1] + a[i-2];
		}
		return a[n];
	} 
测试代码:

	
		long t1=System.currentTimeMillis();
		System.out.println(cs.climbStair(44));
		long t2=System.currentTimeMillis();
		System.out.println(t2-t1);
		
		long t3=System.currentTimeMillis();
		System.out.println(cs.climbStairs(44));
		long t4=System.currentTimeMillis();
		System.out.println(t4-t3);
运行结果:

1134903170
15667  //递归写法所用的时间
1134903170
0 //迭代写法所用的时间,几乎为零
两者差距很大,想想递归为甚么会如此的消耗时间,递归同时也消耗内存资源,这倒底是怎么回事?在哪里消耗?




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值