279. Perfect Squares

Question

Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.
For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.


Code

public class Solution {
    public int numSquares(int n) {
        if (n < 1) return 0;
        
        int[] dp = new int[n + 1];
        
        for (int i = 1; i <= n; i++) {
            int min = Integer.MAX_VALUE;
            for (int j = 1; j * j <= i; j++) {
                min = Math.min(min, dp[i - j * j] + 1);
            }
            dp[i] = min;
        }
        return dp[n];
    }
}

Solution

动态规划。

dp[i]表示数字i可以拆分成的完美平方数的最小值。

对于每一个数字i (1 <= i <= n),尝试将数字i拆分成j ^ 2 + x,其中j为从1到(j^2 <= i)的枚举。由于j^2已经是一个完美平方数,所以i的完美平方数的拆分值应该为x的完美平方数的拆分值 + 1(这个1就是j^2)

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 11,653评论 0 33
  • Given a positive integer n, find the least number of perf...
    exialym阅读 79评论 0 0
  • 是时候静下来,好好想一想了。领导现在交待的任务越来越少,我任性的活着,但是,这没方向的任性,被我活成了自我放纵!回...
    让自己清醒阅读 110评论 0 0
  • 今天母亲接到一个电话,来电者是在千佛山相亲会遇到我母亲的,女儿单身,对我很感兴趣。母亲问我想不想见这位女孩儿,我既...
    知不言阅读 135评论 1 1
  • 文/书~范乘风
    范乘风阅读 168评论 6 8