1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { public int numSquares(int n) { List<Integer> squares = new ArrayList<>(); for(int i = 1; i * i <= n; i ++) { squares.add(i * i); }
Queue<int[]> queue = new LinkedList<>(); queue.offer(new int[]{n, 0});
while(!queue.isEmpty()) { int[] current = queue.poll(); int curNum = current[0]; int level = current[1];
for(int s : squares) { if(curNum - s == 0) { return level + 1; } if(curNum - s > 0) { queue.offer(new int[]{curNum - s, level + 1}); } } } return n; } }
|