給定正整數 n,找到若干個完全平方數(比如1, 4, 9, 16, ...
)使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。
示例:
輸入: n = 12
輸出: 3
解釋: 12 = 4 + 4 + 4.
輸入: n = 13
輸出: 2
解釋: 13 = 4 + 9.
遞迴的方法
f(n):
1.如果n是乙個完全平方數,則返回1;
2.如果n不是乙個完全平方數,讓n依次減去小於n的完全平方數->x,去計算和為x的最少完全平方和個數f(x);
3.f(n) = min(f(x))+1
問題:隨著n的上公升,時間複雜度會迅速增大,超出時間限制。
class solution:
# def numsquares(self, n: int) -> int:
# x = n**0.5
# if(x%1==0):
# return 1
# else:
# num = float("inf")
# x = int(x)
# while(x>0):
# a = 0
# a = a + self.numsquares(n-(x**2))
# a += 1
# if a佇列+bfs
1. 建立乙個佇列value儲存當前所有相加得到的值,建立乙個佇列儲存步數;
2.對於列首的值依次相加所有小於n的完全平方數,並對相加後的值x進行判斷:
a.x=n, 返回結果
b.xc.x>n, 停止本迴圈,換為佇列的下乙個值繼續該過程。
(遍歷時,一定要去重複,否則時間複雜度也會很高)
class solution:
def numsquares(self, n: int) -> int:
x = n**0.5
if(x%1==0):
return 1
else:
x = int(x)
step =
value =
used_value = [0]*n
i = 1
while(i<=x):
i += 1
j = 0
while(1):
for i in range(x+1):
a = value[0]+i**2
s = step[0]+1
if(a==n):
return s
elif(an):
break
i+=1
del value[0]
del step[0]
LeetCode 完全平方數
給定正整數 n,找到若干個完全平方數 比如 1,4,9,16,使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。給你乙個整數 n 返回和為 n 的完全平方數的 最少數量 完全平方數 是乙個整數,其值等於另乙個整數的平方 換句話說,其值等於乙個整數自乘的積。例如,1 4 9 和 16 都是完...
程式3 完全平方數
題目 乙個整數,它加上100後是乙個完全平方數,再加上168又是乙個完全平方數,請問該數是多少?程式分析 假設該數為 x。1 則 x 100 n2,x 100 168 m2 2 計算等式 m2 n2 m n m n 168 3 設定 m n i,m n j,i j 168,i 和 j 至少乙個是偶數...
Leetcode 279 完全平方數
給定正整數 n,找到若干個完全平方數 比如1,4,9,16,使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12輸出 3解釋 12 4 4 4.示例 2 輸入 n 13輸出 2解釋 13 4 9.解題思路 比較容易想到的方法是bfs 廣度優先搜尋 如果知道四平方和的話就...