DDSA Solutions

Get Minimum Squares

Problem Overview

Minimum number of perfect squares summing to n.

Advertisement

Intuition

Minimum number of perfect squares summing to n. BFS or DP.

Algorithm

  1. 1DP: dp[i] = min(dp[i - j*j] + 1) for all j where j*j <= i. Base: dp[0]=0.

Common Pitfalls

  • Same as LC 279. Precompute squares up to sqrt(n). O(n * sqrt(n)) DP. BFS gives same result.
Get Minimum Squares.java
Java
// Approach: DP. dp[n] = min perfect squares summing to n. dp[i] = min(dp[i - j*j] + 1) for all j*j <= i.
// Time: O(n * sqrt(n)) Space: O(n)
class Solution {
    public int minSquares(int n) {
        int[] dp = new int[n + 1];
        for (int i = 1; i <= n; i++)
            dp[i] = i;

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j * j <= i; j++) {
                int sq = j * j;
                dp[i] = Math.min(dp[i], 1 + dp[i - sq]);
            }
        }

        return dp[n];
    }
}
Advertisement
Was this solution helpful?