21天刷题计划之9.1—童年生活三两事(Java语言描述)

题目描述:

NowCoder小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。
但年幼的他一次只能走上一阶或者一下子蹦上两阶。
现在一共有N阶台阶,请你计算一下NowCoder从第0阶到第N阶共有几种走法。

输入描述:

输入包括多组数据。每组数据包括一个整数n, (1≤n≤90)。

输出描述:

对应每个输入包括一个输出。
为redraiment到达第n阶不同走法的数量。

示例1

输入
1
2

输出
1
2

分析:题意分析,上台阶只有两种方式,要么一次一层,要么一次两层,所以本题很好理解。当爬一层的时候,只有一种方式;当爬两层的时候要么1+1的方式,要么直接蹦跶上去;当需要爬到三层以上情况就不一样了,因为最多只能跳两层台阶,所以最远只能从1层直接蹦跶2层上去,或者从二层走一格上去(其中从一层到二层再到三层的情况已经包含在二层直接上去的方法中了),所以去三层的方法数就是到一层的方法数加上到二层的方法数。以此类推,对于n>=3时,t(n) = t(n-1)+t(n-2)。

代码实现如下:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) throws Exception {
		
		Scanner scan = new Scanner(System.in);
		while(scan.hasNext()){
			int step = scan.nextInt();
			System.out.println(goUpstairsWays(step));
		}
	}

	public static long goUpstairsWays(int step) throws Exception {
		
		if(step<1||step>90){
			throw new Exception("输入有误!");
		}else if(step==1){
			return 1;
		}else if(step==2){
			return 2;
		}else{
			long[] roads = new long[step+1];
			roads[1] = 1;
			roads[2] = 2;
			for(int i = 3;i<=step;i++){
				roads[i] = roads[i-1]+roads[i-2];
			}
			return roads[step];
		}
	}
}

你可能感兴趣的:(21天刷题计划)