279 Perfect Squares
279. Perfect Squares
1. Question
2. Implementation
class Solution {
public int numSquares(int n) {
int upperBound = (int)Math.sqrt(n);
int[] squares = new int[upperBound];
for (int i = 1; i <= upperBound; i++) {
squares[i - 1] = i * i;
}
Queue<Integer> queue = new LinkedList<>();
queue.add(0);
boolean[] visited = new boolean[n + 1];
int level = 0;
while (!queue.isEmpty()) {
int size = queue.size();
++level;
for (int i = 0; i < size; i++) {
int curNum = queue.remove();
visited[curNum] = true;
for (int square : squares) {
int nextNum = curNum + square;
if (nextNum > n) {
break;
}
else if (nextNum == n) {
return level;
}
else if (!visited[nextNum]) {
queue.add(nextNum);
}
}
}
}
return level;
}
}3. Time & Space Complexity
Last updated