mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-13 22:35:09 +08:00
Update 0279.完全平方数.md
This commit is contained in:
@ -217,36 +217,45 @@ class Solution {
|
|||||||
|
|
||||||
Python:
|
Python:
|
||||||
|
|
||||||
|
先遍历物品, 再遍历背包
|
||||||
```python
|
```python
|
||||||
class Solution:
|
class Solution:
|
||||||
def numSquares(self, n: int) -> int:
|
def numSquares(self, n: int) -> int:
|
||||||
'''版本一,先遍历背包, 再遍历物品'''
|
dp = [float('inf')] * (n + 1)
|
||||||
# 初始化
|
|
||||||
nums = [i**2 for i in range(1, n + 1) if i**2 <= n]
|
|
||||||
dp = [10**4]*(n + 1)
|
|
||||||
dp[0] = 0
|
dp[0] = 0
|
||||||
# 遍历背包
|
|
||||||
for j in range(1, n + 1):
|
for i in range(1, n + 1): # 遍历背包
|
||||||
# 遍历物品
|
for j in range(1, int(i ** 0.5) + 1): # 遍历物品
|
||||||
for num in nums:
|
# 更新凑成数字 i 所需的最少完全平方数数量
|
||||||
if j >= num:
|
dp[i] = min(dp[i], dp[i - j * j] + 1)
|
||||||
dp[j] = min(dp[j], dp[j - num] + 1)
|
|
||||||
return dp[n]
|
return dp[n]
|
||||||
|
|
||||||
def numSquares1(self, n: int) -> int:
|
|
||||||
'''版本二, 先遍历物品, 再遍历背包'''
|
|
||||||
# 初始化
|
|
||||||
nums = [i**2 for i in range(1, n + 1) if i**2 <= n]
|
|
||||||
dp = [10**4]*(n + 1)
|
|
||||||
dp[0] = 0
|
|
||||||
# 遍历物品
|
|
||||||
for num in nums:
|
|
||||||
# 遍历背包
|
|
||||||
for j in range(num, n + 1):
|
|
||||||
dp[j] = min(dp[j], dp[j - num] + 1)
|
|
||||||
return dp[n]
|
|
||||||
```
|
```
|
||||||
|
其他版本
|
||||||
|
```python
|
||||||
|
class Solution:
|
||||||
|
def numSquares(self, n: int) -> int:
|
||||||
|
# 创建动态规划数组,初始值为最大值
|
||||||
|
dp = [float('inf')] * (n + 1)
|
||||||
|
# 初始化已知情况
|
||||||
|
dp[0] = 0
|
||||||
|
|
||||||
|
# 遍历背包容量
|
||||||
|
for i in range(1, n + 1):
|
||||||
|
# 遍历完全平方数作为物品
|
||||||
|
j = 1
|
||||||
|
while j * j <= i:
|
||||||
|
# 更新最少完全平方数的数量
|
||||||
|
dp[i] = min(dp[i], dp[i - j * j] + 1)
|
||||||
|
j += 1
|
||||||
|
|
||||||
|
# 返回结果
|
||||||
|
return dp[n]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
Go:
|
Go:
|
||||||
```go
|
```go
|
||||||
// 版本一,先遍历物品, 再遍历背包
|
// 版本一,先遍历物品, 再遍历背包
|
||||||
|
Reference in New Issue
Block a user