爬楼梯
描述
?
在你面前有一個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處理。?
總結
- 上一篇: 005_解密饿了么大前端团队
- 下一篇: js保留两位小数,整数不补零