第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;
}

posted @ 2021-09-15 23:00  现在开始努力  阅读(82)  评论(0)    收藏  举报