84、动态规划-完全平方数

思路 

第一种递归方式:

 public static int numSquares3(int n) {
        if (n<=2){
            return n;
        }
        return process(n);
    }

    private static int process(int rest) {
       if (rest<=0){
           return 0;
       }
        int min=rest;
        for (int i = 2; i*i <=rest ; i++) {
            int count=rest/(i*i);
            for (int j = 1; j <=count; j++) {
                min=Math.min(j+process(rest-i*i),min);
            }
        }
       return min;
    }

第二种动态规划:依照递归方式我们可以知道状态转移方程

动态规划思路

  1. 定义DP数组dp[i] 表示整数 i 最少可以由多少个完全平方数相加组成。
  2. 初始化:对于任意整数 i,最坏的情况是 ii1 组成,因此 dp[i] 初始化为 i
  3. 状态转移:对于每个 i,遍历所有可能的完全平方数 j*jj*j <= i),更新 dp[i]dp[i]dp[i-j*j] + 1 中的较小值。其中 +1 是因为 j*j 是参与组成 i 的一个完全平方数。
  4. 边界条件dp[0] 应为 0,因为0不需要任何数字就能表示。

代码如下:

 public static int numSquares(int n) {
        if (n<=2){
            return n;
        }
        int[] dp = new int[n + 1];
        dp[1]=1;
        dp[2]=2;
        for (int i =3; i <=n; i++) {
            //最坏情况下 都是1 组成
            dp[i]=i;
            for (int j = 2; j*j <=i ; j++) {
                //直接给 j*j 赋值
                dp[j*j]=1;
                //两个部分组成 dp[i-j*j]和dp[j*j]=>dp[i-j*j]+1
                dp[i]=Math.min(dp[i],dp[i-j*j]+dp[j*j]);
            }
        }
        return dp[n];
    }

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-04 03:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-04 03:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-04 03:50:03       82 阅读
  4. Python语言-面向对象

    2024-05-04 03:50:03       91 阅读

热门阅读

  1. js中对象转数组常用的方法

    2024-05-04 03:50:03       31 阅读
  2. 嵌入式硬件中优化设计PCB提高焊接质量方法

    2024-05-04 03:50:03       36 阅读
  3. 【LAMMPS学习】八、基础知识(5.6)绝热核/壳模型

    2024-05-04 03:50:03       34 阅读
  4. R语言相关知识点

    2024-05-04 03:50:03       29 阅读
  5. k8s: 从私有仓库harbor获取镜像

    2024-05-04 03:50:03       28 阅读
  6. python安装cx_Oracle 遇到的问题

    2024-05-04 03:50:03       33 阅读
  7. 软设之死锁问题

    2024-05-04 03:50:03       31 阅读
  8. JVM面试

    2024-05-04 03:50:03       31 阅读
  9. 生信分析最好的系统架构:个人观点

    2024-05-04 03:50:03       35 阅读