题目描述
在你面前有一个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;
}
}