Leetcode 279 完全平方數

2021-09-01 23:08:35 字數 1277 閱讀 9888

給定正整數 n,找到若干個完全平方數(比如1, 4, 9, 16, ...)使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。

示例 1:

輸入:n =12輸出:3解釋:12 = 4 + 4 + 4.
示例 2:

輸入:n =13輸出:2解釋:13 = 4 + 9.
解題思路:比較容易想到的方法是bfs(廣度優先搜尋),如果知道四平方和的話就更容易了,做此題之間,我也是一無所知。如果強行bfs搜尋,假設數為n,最多到第四層就可以出來結果,那麼複雜度是sqrt(n)^4=n^2,這樣一來時間基本保持在500ms附近。根據0ms**,可以發現:

1. 假如n=a*a+b*b+c*c+d*d,那麼4*n=(2a)*(2a)+(2b)*(2b)+(2c)*(2c)+(2d)*(2d)。因此不會影響分解的個數。因此盡量將n=n/4以減小n的大小。

2. n%8==7必然是4個不為0的完全平方和。

3.其餘只剩下n%8=(1,2,3,5,6)這些數必然是2到3個,先判斷能否是兩個,否則就是3個。

於是複雜度就變成了sqrt(n)。看了一眼4數平方和定理,感覺這個就記住就ok了。。。。

bfs版本:

四平方和版本:

c++**

class solution

}return 3;}};

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...

Leetcode279 完全平方數

給定正整數 n,找到若干個完全平方數 比如 1,4,9,16,使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12 輸出 3 解釋 12 4 4 4.示例 2 輸入 n 13 輸出 2 解釋 13 4 9.解法1 bfs public intnumsquares in...

LeetCode 279 完全平方數

279.完全平方數 給定正整數 n,找到若干個完全平方數 比如1,4,9,16,使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12輸出 3解釋 12 4 4 4.示例 2 輸入 n 13輸出 2解釋 13 4 9.解題思路 對問題建模,將整個問題轉化為乙個圖論問題。從...