public class ClimbStairs {
//方法一:动态规划
public int climbStairs1(int n) {
//定义两个临时变量,保存前两个状态
int pre2 = 1,pre1 = 1;//fib(1)和fib(2)
int curr;
for (int i = 1; i <n ; i++) {
//定义一个临时变量,保存当前的状态
curr = pre1+pre2;
pre2 = pre1;
pre1 = curr;
}
return pre1;
}
//方法二:数学公式法
public int climbStairs(int n) {
double sqrt_5 = Math.sqrt(5);
double fib = (Math.pow((1 + sqrt_5) / 2, n + 1) - Math.pow((1 - sqrt_5) / 2, n + 1)) / sqrt_5;
return (int) fib;
}
public static void main(String[] args) {
ClimbStairs climbStairs = new ClimbStairs();
System.out.println(climbStairs.climbStairs(3));
}
}