Java快速开发学习

锁清秋

leetcode-动态规划 (穷举最值)

动态规划一般有三个步骤:
(首先,如果问题存在“重叠子问题,那么一般情况下就可以使用 动态规划”)

  1. 找出最优子结构
  2. 找到转台转移方程
  3. 剪枝

1. 斐波那契数列

  1. 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 1 开始,
  2. 后面的每一项数字都是前面两项数字的和。也就是:
  3. F(0) = 0, F(1) = 1
  4. F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
  5. 给定 N,计算 F(N)。
  6. 示例 1
  7. 输入:2
  8. 输出:1
  9. 解释:F(2) = F(1) + F(0) = 1 + 0 = 1.
  10. 示例 2
  11. 输入:3
  12. 输出:2
  13. 解释:F(3) = F(2) + F(1) = 1 + 1 = 2.
  14. 示例 3
  15. 输入:4
  16. 输出:3
  17. 解释:F(4) = F(3) + F(2) = 2 + 1 = 3.
  18. 提示:
  19. 0 N 30
  20. Related Topics 数组
  1. public int fib(int N) {
  2. if (N <= 1) {
  3. return N;
  4. }
  5. int pre = 0;
  6. int cur = 1;
  7. int ct = 1;
  8. while (ct++ < N) {
  9. int temp = cur + pre;
  10. pre = cur;
  11. cur = temp;
  12. }
  13. return cur;
  14. }

2. 钱币问题

  1. 硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。
  2. (结果可能会很大,你需要将结果模上1000000007)
  3. 示例1:
  4. 输入: n = 5
  5. 输出:2
  6. 解释: 有两种方式可以凑成总金额:
  7. 5=5
  8. 5=1+1+1+1+1
  9. 示例2:
  10. 输入: n = 10
  11. 输出:4
  12. 解释: 有四种方式可以凑成总金额:
  13. 10=10
  14. 10=5+5
  15. 10=5+1+1+1+1+1
  16. 10=1+1+1+1+1+1+1+1+1+1
  17. 说明:
  18. 注意:
  19. 你可以假设:
  20. 0 <= n (总金额) <= 1000000
  21. Related Topics 动态规划