描述
在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。
请问计算出你可以采用多少种不同的方式爬完这个楼梯。
输入
一个正整数,表示这个楼梯一共有多少阶
输出
一个正整数,表示有多少种不同的方式爬完这个楼梯
输入样例
5
10
输出样例
8
89
思路分析:
本题是个很明显的斐波拉契数列问题,根据推到可快速得到答案,现提供另外一个思路,就是实际上我们是对1,2,在n级台阶,相当于n个位置做全排列,可以根据整个1,2的个数进行全排列然后求和;
参考代码:
public static long fullPermutations(int a, int b, int c){ long sum = 1; if(b < c){ int temp = b; b = c; c = temp; } //计算全排个数 for(int i=a; i>b;i--){ sum *= i; } for(int i=2; i<=c;i++){ sum /= i; } return sum; } private static String solution(String line) { // 在此处理单行数据 int boundary = Integer.valueOf(line); long result = 0; if(line.equals("1")){ return "1"; } int len = boundary / 2; int flag = 0; if(boundary % 2 != 0){ flag = 1; } //遍历2的个数,累加 for(int i = 0; i<=len; i++){ result += fullPermutations2(i + (len-i)*2 + flag , i, (len-i)*2 + flag); } // 返回处理后的结果 return result + ""; }
问题:由于使用乘法,当输入的值较大时,数据可能溢出,可采用BigInteger处理。