前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发优快云,mcf171专栏。
博客链接:mcf171的博客
——————————————————————————————
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
这个题目没多想,当成排列组合的问题来处理的。看了下讨论区,还可以当错斐波那数列解决。 Your runtime beats 14.69% of java submissions.
public class Solution {
public int climbStairs(int n) {
int num1 = n %2;
int num2 = n /2;
int results = 0;
for(int i = 0 ; i <= num2; i ++){
results += calCombination( num1 + num2 + i, num2 - i);
}
return results;
}
public int calCombination(int i, int j){
long num = 1,deno = 1;
int times = Math.min(j,i-j);
j = times;
int result = 1;
for(int k = 0 ; k < times ; k ++){
num *= (i - k);
deno *= (j - k);
if(num % deno == 0) {result *= num / deno; num = 1; deno = 1;}
}
return (int)(num * result/deno);
}
}