【LeetCode】70. Climbing Stairs

题目:


简述题目:

    题目是说,你可以走一步或者两步,现在给定总步数,求一共有多少种走法

思路:

       n = 1,res = 1;

       n = 2 , res = 2;

    之后的每一步就可以由两个部分组成“还差一步到目的地”和“还差两步到目的地”,也就是说:climbStairs(n) = climbStairs(n - 1) + climbStairs(n - 2);但是如果直接这样,会导致每一步都要算多一次前面的步骤,导致运算工程量很大,考虑一下目标,可以发现,我们并不关注中间过程,因此可以每算一次,记录下来,然后一次次更新,直至计算出目标为止。



public class climbStairs70 {
//	public static int climbStairs(int n) {
//		if(n == 1)
//			return 1;
//		else if(n == 2)
//			return 2;
//		else return climbStairs(n - 1) + climbStairs(n - 2);
//				直接这样写会超时
        return 0;
//    }
	public static int climbStairs(int n) {
		int leftTwo = 1;//还差两步
		int leftOne = 2;//还差一步
		int res = 0; 
	if(n == 1)
		return 1;
	else if(n == 2)
		return 2;
	else {
		for(int i = 3; i <=n ; i++){
			res = leftOne + leftTwo;//这就是climbStairs(n)
			leftTwo = leftOne;//climbStairs(n-2)
			leftOne = res;//climbStairs(n-1)(因为此时i已经+1了)
		}
		return res;
	}
}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(climbStairs(44));
	}


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值