LeetCode 279. 完全平方数

279. 完全平方数

解题思路

参考代码

与零钱兑换思路一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int numSquares(int n) {
int[] dp = new int[n + 1];
Arrays.fill(dp, n + 1);
dp[0] = 0;

for(int i = 1; i <= n; i ++) {
int temp = dp[i];
// 遍历所有 ≤ i 的完全平方数
for(int j = 1; j * j <= i; j ++) {
int square = j * j;
// 凑i的最少个数
temp = Math.min(temp, dp[i - square] + 1);
}
dp[i] = temp;
}
return dp[n];
}
}

BFS 解法(超时)

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;
}
}

LeetCode 279. 完全平方数
https://sowink.cn/2026/02/08/LeetCode-279-完全平方数/
作者
Xurx
发布于
2026年2月8日
许可协议