【LeetCode】完全平方数 (BFS)

    科技2026-04-23  3

    【LeetCode】完全平方数 (BFS)

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

    示例1:

    输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4.

    示例2:

    输入: n = 13 输出: 2 解释: 13 = 4 + 9.

    本题可以用动态规划,但是这里主要是用BFS宽度优先遍历。把每一种可能性都加入到队列中,一定要注意去重(不然会死循环)。【做了一些用BFS做的题发现,使用队列去BFS需要加上剪枝去重(这种操作是必不可少的)!!!】

    public int numSquares(int n) { boolean visite[] = new boolean[n+1]; Arrays.fill(visite,true); Queue<Integer> queue = new LinkedList<Integer>(); int count=0; int size; queue.add(n); visite[n]=false; while(!queue.isEmpty()) { size = queue.size(); count++; for(int i=0;i<size;i++) { int number = queue.poll(); for(int j=1;j*j<=number;j++) { if(number-j*j==0) return count; if(number-j*j<0) break; if(visite[number-j*j]==true) { visite[number-j*j]=false; queue.add(number-j*j); } } } } return count; }
    Processed: 0.010, SQL: 9