public class Solution {
public int C(int m1,int m2){
int sum1 = 1;
for(int i = 0;i < m2;i++){
sum1 *= (m1 - i);
}
for(int i = 1;i <= m2; i++){
sum1 /= i;
}
return sum1;
}
public int climbStairs(int n) {
int count = 0;
for(int i = 0;i <= n/2;i++){
count += C(n - i*2 + i, i);
}
return count;
}
}
上面求组合竟然有溢出!!!
貌似可以用fibonacci。。。
public class Solution {
public int climbStairs(int n) {
if(n <= 2){
return n;
}
int[] f = new int[n+1];
f[1] = 1;
f[2] = 2;
for(int i = 3;i <= n;i++){
f[i] = f[i-1] + f[i-2];
}
return f[n];
}
}
看别人的代码,更简单的,时间O(n),空间O(1);赞!!!
public class Solution {
public int climbStairs(int n) {
if (n == 1 || n == 2) {
return n == 1 ? 1 : 2;
}
int a = 2, b = 1, c;
for (int i = 0; i < n - 2; i++) {
c = a + b;
b = a;
a = c;
}
return a;
}
}
如下,最原始的方法求fibonacci数,会超时滴
public class Solution {
public int Fibonacci(int n){
if(n <= 2){
return n;
}
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
public int climbStairs(int n) {
return Fibonacci(n);
}
}