爬楼梯

题目描述
在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。
请问计算出你可以采用多少种不同的方式爬完这个楼梯。
输入描述:
一个正整数n(n<=100),表示这个楼梯一共有多少阶
输出描述:
一个正整数,表示有多少种不同的方式爬完这个楼梯
示例1

输入 5

输出 8

思路:。。。。也算是一个算法题吧,题目倒是很简单 就是让你求爬楼梯有多少种不同的方法,本题需要注意的是max n == 100所以最后求出来的数值很大 long是装不下的 要用到大数 这种题找到出口就好写了 此题的出口就是爬1阶台阶只有一种方式 爬2阶台阶只有两种方式(一阶一阶走和一下走两节) 那么之后的3阶4阶…n阶 最后登顶的那一下 有可能最后一步通过走 1阶上来的 ;也可能是走2阶上来的;
所以说
10阶 = 到达 9 阶 + 到达 8 阶 的 方法总数。
9阶 = 到达 8 阶 + 到达 7 阶 的 方法总数。
… … …
3阶 = 到达 2 阶 !! + 到达 1 阶!! 的 方法总数。(出口)


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int s = sc.nextInt();
        BigInteger a = result(s);
        System.out.println(a);
    }
    public static BigInteger result(int s){
        if(s==1){
            BigInteger a = new BigInteger("1");
            return a;
        }
        if(s==2){
            BigInteger a = new BigInteger("2");
            return a;
        }
        //第一次没过 是因为 用递归写 导致运行超时了
        //return result(s-1).add(result(s-2));
        
        //以下为 s>=3的情况   //第二次尝试用for循环解决超时问题
        BigInteger x = new BigInteger("1");
        BigInteger y = new BigInteger("2");
        BigInteger t= new BigInteger("0");
        for(int i=3;i<=s;i++){
            t = x.add(y);
            //然后xy重新赋值 不递归了
            x = y;
            y = t;
        }
        return t;
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值