Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.
Example 1:
Input: n =12Output: 3 Explanation:12 = 4 + 4 + 4.
Example 2:
Input: n =13Output: 2 Explanation:13 = 4 + 9.
这是一个标签为动态规划的题,不过我目前用的方法是bfs。
思路上来讲首先建立一个所有小于n的平方数的列表,比如n=12,sqnums=[1,4,9]
然后用12分别减去sqnums,结果保存在temp中,也就是[11,8,3],此时计数器+1
然后继续用广度优先遍历,用[11,8,3]这些已经减去一次平方数的数字,再减一次平方数,也就是[11-1,11-4,11-9,8-1,8-4,3-1](小于零会跳过。
这样不断遍历,遇到第一个0的时候就是最优解。
class Solution:
def numSquares(self, n: int) -> int:
sqnums=[]
sqnum=1
while sqnum*sqnum<=n:
sqnums.append(sqnum*sqnum)
sqnum+=1
result={n}
final=0
while result:
final += 1
temp=set()
for res in result:
for sq in sqnums:
if res==sq:
return final
if res<sq:
break
temp.add(res-sq)
result = temp
return final

本文探讨了如何找到正整数n的最小数量的完全平方数之和,通过使用广度优先搜索(BFS)策略,从所有小于n的平方数列表开始,逐步减少直到找到最优解。
525

被折叠的 条评论
为什么被折叠?



