第1天--算法(斐波那契数列,青蛙跳台问题)
斐波那契数列:
public int Fibonacci(int n) {
if(n <= 1){
return n;
}
int dp1 = 0;
int dp2 = 1;
int res = 0; //最后的返回值
for(int i = 2;i <= n;i ++){
res = dp1 + dp2; //此时dp1,dp2为0,1,res为dp1+dp2 = 1 将dp1,dp2向后移,即变成dp1,dp2为1,1,再次将dp1+dp2的结果赋给res
dp1 = dp2;
dp2 = res;
}
return res;
}
青蛙跳台问题:
public int jumpFloor(int target) {
if(target <= 2){
return target;
}
int dp1 = 1; //跳上一级台阶有一种情况:1
int dp2 = 2; //跳上二级台阶有两种情况:2 / 1 + 1
int res = 0;
for(int i = 3;i <= target;i ++){ //如果有三级台阶,那么最后一步要么从第一级跳上来,要么从第二级跳上来,所以dp3 = dp1 + dp2;
res = dp1 + dp2; //同理,如果有四级台阶,那么最后一步要么从第二级跳上来,要么从第三级跳上来,所以dp4 = dp2 + dp3;
dp1 = dp2; //所以,如果有n级台阶,那么dpn = dp(n-1) + dp(n-2);
dp2 = res;
}
return res;
}