509. 斐波那契数
public static int fib(int n) { // 找出最后一步 // 定义损失函数 定义记忆化存储基本单元 // 状态转移方程 f(n) = f(n-2)+f(n-1); n > 0 // 边界 (递归过程中需要判断) // 初始化 (在未递归之前需要处理) // 返回答案 if (n == 0) { return 0; } if (n == 1) { return 1; } int[] dp = new int[n]; dp[0] = 0; dp[1] = 1; for (int i = 2; i < n; i++) { findFibonacci(i, dp); } return dp[n - 1] + dp[n - 2]; } public static void findFibonacci(int n, int[] dp) { dp[n] = dp[n - 1] + dp[n - 2]; }
70. 爬楼梯
public static int climbStairs(int n) { //找出最后一步 //定义损失函数 定义记忆化存储基本单元 //状态转移方程 f(n) = f(n-2)+2; n > 0 // f(n) = f(n-1)+1; n > 0 //边界 (递归过程中需要判断) //初始化 (在未递归之前需要处理) //返回答案 if (n == 0) { return 0; } if (n == 1) { return 1; } if (n == 2) { return 2; } int[] dp = new int[n]; dp[0] = 0; dp[1] = 1; dp[2] = 2; for (int i = 3; i < n; i++) { climbStair(i, dp); } return dp[n - 1] + dp[n - 2]; } public static void climbStair(int n, int[] dp) { dp[n] = dp[n - 1] + dp[n - 2]; }
746. 使用最小花费爬楼梯
public static int minCostClimbingStairs(int[] cost) { int stairCase = cost.length + 1; // 找出最后一步 // 定义损失函数 定义记忆化存储基本单元 // 状态转移方程 f(n) = cost[n-1] > cost[n-2]?cost[n-2]:cost[n-1] n>2 // f(n) = f(n-1)+1; n > 0 // 边界 (递归过程中需要判断) // 初始化 (在未递归之前需要处理) // 返回答案 if (stairCase == 1) { return 0; } if (stairCase == 2) { return cost[0]; } int[] dp = new int[cost.length + 2]; dp[0] = 0; dp[1] = 0; dp[2] = 0; for (int i = 3; i < dp.length; i++) { costClimbingStairs(dp, cost, i); } return dp[dp.length - 1]; } public static void costClimbingStairs(int[] dp, int[] cost, int index) { if (dp[index - 1] + cost[index - 2] <= dp[index - 2] + cost[index - 3]) { dp[index] = dp[index - 1] + cost[index - 2]; } else { dp[index] = dp[index - 2] + cost[index - 3]; } }
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章