[DP]279. Perfect Squares

279. Perfect Squares

完美平方数都可以看做一个普通数加上一个完美平方数

如图所示,红色部分表示平方数,所有的完美平方数都可以看做一个普通数加上一个完美平方数,那么递推式就变为了:dp[i + j * j] = Math.min(dp[i] + 1, dp[i + j * j])。

class Solution {
    public int numSquares(int n) {
        int[] dp = new int[n+1];
        for(int i = 1; i<=n ;i++){
            dp[i] = i; // 最多都由1组成
            for(int j = 1; j*j<=i; j++){
                dp[i] = Math.min(dp[i], dp[i-j*j]+1);
            }
        }
        return dp[n];
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,352评论 0 33
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,691评论 0 89
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,762评论 0 18
  • 目录 53、max subarray 62、unique paths 63、unique path2 70、cli...
    lifesmily阅读 1,768评论 0 0
  • 坐在地铁上,整理一下思路。许久不曾这样感动过,不是因为干活累,不是因为老板给的工钱少,也不是因为我饿。那个小姑...
    浪子重阅读 2,750评论 0 0