Skip to content

Commit cdc0376

Browse files
committed
Update 0279. 完全平方数.md
1 parent a7f4658 commit cdc0376

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

Solutions/0279. 完全平方数.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,33 @@
2828

2929
## 解题思路
3030

31-
对于小于 `n` 的完全平方数,直接暴力枚举所有可能的组合,并且找到平方数个数最小的一个。
31+
暴力枚举思路:对于小于 `n` 的完全平方数,直接暴力枚举所有可能的组合,并且找到平方数个数最小的一个。
3232

33-
并且对于所有小于 `n` 的完全平方数(`k = 1, 4, 9, 16, ...`),存在公式 $ans(n) = min(ans(n - k) + 1),k = 1,4,9,16,...$
33+
并且对于所有小于 $n$ 的完全平方数($k = 1, 4, 9, 16, ...$),存在公式$ans(n) = min(ans(n - k) + 1),k = 1,4,9,16,...$
3434

3535
即: **n 的完全平方数的最小数量 == n - k 的完全平方数的最小数量 + 1**
3636

3737
我们可以使用递归解决这个问题。但是因为重复计算了中间解,会产生堆栈溢出。
3838

3939
那怎么解决重复计算问题和避免堆栈溢出?
4040

41-
我们可转换一下思维
41+
我们可以转换一下思维
4242

4343
1.`n` 作为根节点,构建一棵多叉数。
4444
2.`n` 节点出发,如果一个小于 `n` 的数刚好与 `n` 相差一个平方数,则以该数为值构造一个节点,与 `n` 相连。
4545

46-
那么求解和为 `n` 的完全平方数的最小数量就变成了求解这棵树从 `n` 节点到 `0` 节点的最短路径,或者说数的最小深度
46+
那么求解和为 `n` 的完全平方数的最小数量就变成了求解这棵树从根节点 `n` 到节点 `0` 的最短路径,或者说树的最小深度
4747

4848
这个过程可以通过广度优先搜索来做。
4949

5050
### 思路 1:广度优先搜索
5151

52-
1. 定义 `visited` 为标记访问节点的 set 集合变量,避免重复计算。定义 `queue` 为存放节点的队列。使用 `count` 表示和为 `n` 的完全平方数的最小数量。
52+
1. 定义 `visited` 为标记访问节点的 set 集合变量,避免重复计算。定义 `queue` 为存放节点的队列。使用 `count` 表示为树的最小深度,也就是和为 `n` 的完全平方数的最小数量。
5353
2. 首先,我们将 `n` 标记为已访问,即 `visited.add(n)`。并将其加入队列 `queue` 中,即 `queue.append(n)`
5454
3.`count``1`,表示最小深度加 `1`。然后依次将队列中的节点值取出。
5555
4. 对于取出的节点值 `value`,遍历可能出现的平方数(即遍历 $[1, \sqrt{value} + 1]$ 中的数)。
5656
5. 每次从当前节点值减去一个平方数,并将减完的数加入队列。
57-
1. 如果此时的数等于 `0`,则满足题意,返回层数
57+
1. 如果此时的数等于 `0`,则满足题意,返回当前树的最小深度
5858
2. 如果此时的数不等于 `0`,则将其加入队列,继续查找。
5959

6060
### 思路 1:代码

0 commit comments

Comments
 (0)