279. Perfect Squares

Given a positive integern, find the least number of perfect square numbers (for example,1, 4, 9, 16, ...) which sum ton.

For example, givenn=12, return3because12 = 4 + 4 + 4; givenn=13, return2because13 = 4 + 9.

S: DP O(n)

dp[i]表示n = i时需要的最少的perfect square数.

dp[i] = min(dp[i -1] + 1, dp[i - 4] + 1, dp[i - 9] + 1, .. dp[i - j*j] + 1)

    int numSquares(int n) { 
        if (n < 4) return n;
        vector<int> dp(n + 1, INT_MAX);
        dp[0] = 0;
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j * j <= i; ++j) {
                dp[i] = min(dp[i], dp[i - j * j] + 1);
            }
        }
        return dp[n];
    }

results matching ""

    No results matching ""