279. Perfect Squares | LeetCode

2018-09-11  本文已影响0人  kid551

定义dp[n]为:n最少可由dp[n]个完全平方数的和构成。所以,我们有:

稍微解释一下第三条。dp[n]表示的是平方数的和。所以,组成它的和中,至少有一个元素是以平方的形式存在于等式中。这就是a^2。此时,即便是n为完全平方数,由于我们有第一条补充定义dp[0]=0,我们的等式依旧成立。

当a在[0, \sqrt{n}]做遍历时,仅当发现更小的组合时,才更新dp[n]的值。

public int numSquares(int n) {
    int[] dp = new int[n + 1];
    
    for (int i = 0; i <= n; i++) {
        dp[i] = i;
        for (int a = 0; a <= Math.sqrt(i); a++) {
            dp[i] = Math.min(dp[i], dp[i - a*a] + 1);
        }
    }
                    
    return dp[n];        
}
上一篇 下一篇

猜你喜欢

热点阅读