赞
踩
1137. 第 N 个泰波那契数 - 力扣(LeetCode)
- class Solution {
- public int tribonacci(int n) {
- // 1. 创建 dp 表
- // 2. 初始化
- // 3. 填表
- // 4. 返回结果
-
- // 处理边界情况
- if (n == 0)
- return 0;
- if (n == 1 || n == 2)
- return 1;
- int[] dp = new int[n + 1];
- dp[0] = 0;
- dp[1] = dp[2] = 1;
- for (int i = 3; i <= n; i++)
- dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
- return dp[n];
- }
- }

- class Solution {
- public int tribonacci(int n) {
- if (n == 0)
- return 0;
- if (n == 1 || n == 2)
- return 1;
- int a = 0, b = 1, c = 1, d = 0;
- for (int i = 3; i <= n; i++) {
- d = a + b + c;
- a = b;
- b = c;
- c = d;
- }
- return d;
- }
- }

面试题 08.01. 三步问题 - 力扣(LeetCode)
- class Solution {
- public int waysToStep(int n) {
- // 1. 创建 dp 表
- // 2. 初始化
- // 3. 填表
- // 4. 返回值
- int MOD = (int) 1e9 + 7;
-
- // 处理⼀下边界情况
- if (n == 1 || n == 2)
- return n;
- if (n == 3)
- return 4;
-
- int[] dp = new int[n + 1];
- dp[1] = 1;
- dp[2] = 2;
- dp[3] = 4;
- for (int i = 4; i <= n; i++)
- dp[i] = ((dp[i - 1] + dp[i - 2]) % MOD + dp[i - 3]) % MOD;
- return dp[n];
- }
- }

- class Solution {
- public int minCostClimbingStairs(int[] cost) {
- // 1. 创建 dp 表
- // 2. 初始化
- // 3. 填表
- // 4. 返回值
- int n = cost.length;
- int[] dp = new int[n + 1];
- for (int i = 2; i <= n; i++)
- dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
- return dp[n];
- }
- }
class Solution { public int minCostClimbingStairs(int[] cost) { // 1. 创建 dp 表 // 2. 初始化 // 3. 填表 // 4. 返回值 int n = cost.length; int[] dp = new int[n]; dp[n - 1] = cost[n - 1]; dp[n - 2] = cost[n - 2]; for (int i = n - 3; i >= 0; i--) dp[i] = Math.min(dp[i + 1], dp[i + 2]) + cost[i]; return Math.min(dp[0], dp[1]); } }
- class Solution {
- public int numDecodings(String ss) {
- // 1. 创建 dp 表
- // 2. 初始化
- // 3. 填表
- // 4. 返回值
- int n = ss.length();
- char[] s = ss.toCharArray();
- int[] dp = new int[n];
- if (s[0] != '0')
- dp[0] = 1; // 初始化第⼀个位置
- if (n == 1)
- return dp[0]; // 处理边界情况
- // 初始化第⼆个位置
- if (s[1] != '0' && s[0] != '0')
- dp[1] += 1;
- int t = (s[0] - '0') * 10 + s[1] - '0';
- if (t >= 10 && t <= 26)
- dp[1] += 1;
- for (int i = 2; i < n; i++) {
- // 先处理第⼀种情况
- if (s[i] != '0')
- dp[i] += dp[i - 1];
- // 处理第⼆种情况
- int tt = (s[i - 1] - '0') * 10 + s[i] - '0';
- if (tt >= 10 && tt <= 26)
- dp[i] += dp[i - 2];
- }
- return dp[n - 1];
- }
- }

- ass Solution {
- public int numDecodings(String ss) {
- // 1. 创建 dp 表
- // 2. 初始化
- // 3. 填表
- // 4. 返回值
- int n = ss.length();
- char[] s = ss.toCharArray();
- int[] dp = new int[n + 1];
- dp[0] = 1; // 保证后续填表是正确的
- if (s[1 - 1] != '0')
- dp[1] = 1;
- for (int i = 2; i <= n; i++) {
- // 先处理第⼀种情况
- if (s[i - 1] != '0')
- dp[i] += dp[i - 1];
- // 处理第⼆种情况
- int tt = (s[i - 2] - '0') * 10 + s[i - 1] - '0';
- if (tt >= 10 && tt <= 26)
- dp[i] += dp[i - 2];
- }
- return dp[n];
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。