LeetCode Solutions
279. Perfect Squares
Time: $O(\log n)$ Space: $O(n\log n)$
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n + 1, n); // 1^2 x n
dp[0] = 0; // No way
dp[1] = 1; // 1^2
for (int i = 2; i <= n; ++i)
for (int j = 1; j * j <= i; ++j)
dp[i] = min(dp[i], dp[i - j * j] + 1);
return dp[n];
}
};
class Solution {
public int numSquares(int n) {
int[] dp = new int[n + 1];
Arrays.fill(dp, n); // 1^2 x n
dp[0] = 0; // No way
dp[1] = 1; // 1^2
for (int i = 2; i <= n; ++i)
for (int j = 1; j * j <= i; ++j)
dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
return dp[n];
}
}
class Solution:
def numSquares(self, n: int) -> int:
dp = [n] * (n + 1)
dp[0] = 0
dp[1] = 1
for i in range(2, n + 1):
j = 1
while j * j <= i:
dp[i] = min(dp[i], dp[i - j * j] + 1)
j += 1
return dp[n]