大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。
输入:
4
返回值:
3
说明:
根据斐波那契数列的定义可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案为3。
动态规划
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | public class Solution {public int Fibonacci(int n) {
 int[] dp = new int[n + 1];
 dp[1] = 1;
 dp[2] = 1;
 for (int i = 3; i <= n; i++) {
 dp[i] = dp[i - 1] + dp[i - 2];
 }
 return dp[n];
 }
 }
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | import java.util.Scanner;
 
 public class Main {
 public static void main(String[] args) {
 Scanner in = new Scanner(System.in);
 int n = in.nextInt();
 
 int[] dp = new int[n + 1];
 dp[1] = 1;
 dp[2] = 1;
 for (int i = 3; i <= n; i++) {
 dp[i] = dp[i - 1] + dp[i - 2];
 }
 System.out.println(dp[n]);
 }
 }
 
 | 
递归
| 12
 3
 4
 5
 6
 7
 8
 
 | public class Solution {public int Fibonacci(int n) {
 if (n == 1 || n == 2) {
 return 1;
 }
 return Fibonacci(n - 1) + Fibonacci(n - 2);
 }
 }
 
 | 
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | public class Solution {public int jumpFloor(int target) {
 int[] dp = new int[40];
 if(target ==1){
 return 1;
 }
 if(target == 2){
 return 2;
 }
 dp[1]=1;
 dp[2]=2;
 for(int i =3;i<=target; i++){
 dp[i]=dp[i-1] + dp[i-2];
 }
 return dp[target];
 }
 }
 
 | 
最小花费爬楼梯
描述
给定一个整数数组 cost ,其中 cost[i]  是从楼梯第i 个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
输入:
[1,100,1,1,1,90,1,1,80,1]
返回值:
6
说明:
你将从下标为 0 的台阶开始。
1.支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
2.支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
3.支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
4.支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
5.支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
6.支付 1 ,向上爬一个台阶,到达楼梯顶部。
总花费为 6 。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | public class Solution {
 
 
 
 
 
 
 public int minCostClimbingStairs (int[] cost) {
 
 int[] dp = new int[100001];
 dp[0]=0;
 dp[1]=0;
 for(int i=2;i<=cost.length;i++){
 dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
 }
 return dp[cost.length];
 }
 }
 
 |