爬楼梯
描述
?
在你面前有一個n階的樓梯,你一步只能上1階或2階。
請問計算出你可以采用多少種不同的方式爬完這個樓梯。
?
輸入
?
一個正整數(shù),表示這個樓梯一共有多少階
?
輸出
?
一個正整數(shù),表示有多少種不同的方式爬完這個樓梯
?
輸入樣例
5
10
輸出樣例
8
89
?
思路分析:
本題是個很明顯的斐波拉契數(shù)列問題,根據(jù)推到可快速得到答案,現(xiàn)提供另外一個思路,就是實際上我們是對1,2,在n級臺階,相當(dāng)于n個位置做全排列,可以根據(jù)整個1,2的個數(shù)進(jìn)行全排列然后求和;
參考代碼:
public static long fullPermutations(int a, int b, int c){long sum = 1;if(b < c){int temp = b;b = c;c = temp;}//計算全排個數(shù)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) {// 在此處理單行數(shù)據(jù)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的個數(shù),累加for(int i = 0; i<=len; i++){result += fullPermutations2(i + (len-i)*2 + flag , i, (len-i)*2 + flag);}// 返回處理后的結(jié)果return result + ""; }問題:由于使用乘法,當(dāng)輸入的值較大時,數(shù)據(jù)可能溢出,可采用BigInteger處理。?
總結(jié)
- 上一篇: 005_解密饿了么大前端团队
- 下一篇: js保留两位小数,整数不补零