給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, …)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。
示例 1:
輸入: n = 12
輸出: 3
解釋: 12 = 4 + 4 + 4.
示例 2:
輸入: n = 13
輸出: 2
解釋: 13 = 4 + 9.
題目解析:
這道題如果知道數學定理之後,相當於告訴你:
任何正整數都可以拆分成不超過4個數的平方和 ---> 答案只可能是1,2,3,4
如果乙個數最少可以拆成4個數的平方和,則這個數還滿足 n = (4^a)*(8b+7) ---> 因此可以先看這個數是否滿足上述公式,如果不滿足,答案就是1,2,3了
如果這個數本來就是某個數的平方,那麼答案就是1,否則答案就只剩2,3了
如果答案是2,即n=a^2+b^2,那麼我們可以列舉a,來驗證,如果驗證通過則答案是2
只能是3
class
solution
:def
numsquares
(self, n:
int)
->
int:
while n%4==
0:n /=
4if n%8==
7:return
4 a =
0while a<=n**
0.5:
b =int(
(n-a**2)
**0.5
)if a**
2+b**
2==n:
return
(not
not a)+(
notnot b)
a +=
1return
3
事實證明,演算法題還是數學題
淦
LeetCode 完全平方數
給定正整數 n,找到若干個完全平方數 比如 1,4,9,16,使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。給你乙個整數 n 返回和為 n 的完全平方數的 最少數量 完全平方數 是乙個整數,其值等於另乙個整數的平方 換句話說,其值等於乙個整數自乘的積。例如,1 4 9 和 16 都是完...
Leetcode 279 完全平方數
給定正整數 n,找到若干個完全平方數 比如1,4,9,16,使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12輸出 3解釋 12 4 4 4.示例 2 輸入 n 13輸出 2解釋 13 4 9.解題思路 比較容易想到的方法是bfs 廣度優先搜尋 如果知道四平方和的話就...
LeetCode 279 完全平方數
題目描述 提示幫助 提交記錄社群討論閱讀解答 隨機一題 給定正整數 n,找到若干個完全平方數 比如1,4,9,16,使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12輸出 3解釋 12 4 4 4.示例 2 輸入 n 13輸出 2解釋 13 4 9.class sol...