279. Perfect Squares
Difficulty: Medium
Topics: Math, Dynamic Programming, Breadth-first Search
Similar Questions:
Problem:
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...
) which sum to n.
Example 1:
Input: n =12
Output: 3 Explanation:12 = 4 + 4 + 4.
Example 2:
Input: n =13
Output: 2 Explanation:13 = 4 + 9.
Solutions:
class Solution {
public:
int numSquares(int n) {
queue<int> q;
unordered_set<int> visited;
q.push(n);
visited.insert(n);
int level = 0;
while(true) {
++level;
int size = q.size();
for (int i = 0; i < size; ++i) {
int sum = q.front(); q.pop();
for (int sqrt = 1; sqrt <= sum/sqrt; ++sqrt) {
if (sum == sqrt * sqrt) return level;
int remaining = sum - sqrt * sqrt;
if (visited.count(remaining) > 0) continue;
visited.insert(remaining);
q.push(remaining);
}
}
}
return -1;
}
};