279 Perfect Squares完全平方數

2021-09-11 06:09:49 字數 1285 閱讀 1895

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 = 12

output: 3

explanation: 12 = 4 + 4 + 4.

example 2:

input: n = 13

output: 2

explanation: 13 = 4 + 9.

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

示例 1:

輸入: n = 12

輸出: 3

解釋: 12 = 4 + 4 + 4.

示例 2:

輸入: n = 13

輸出: 2

解釋: 13 = 4 + 9.

這道題可以採用數學方法解決,四方和的方法,這裡採用動態規劃演算法.

主要思路是,當前最小完全平方數的個數,等於前面陣列中最小完全平方數的個數加乙個完全平方數。

狀態轉移方程為:

d p[

i]=m

in(d

p[i]

,dp[

i−j∗

j]+1

)dp[i]=min(dp[i],dp[i-j*j]+1)

dp[i]=

min(

dp[i

],dp

[i−j

∗j]+

1)d p[

i−j∗

j]+1

是前面d

p[i−

j∗j]

這個數的

完全平方

數個數加

j∗j這

乙個完全

平方數,

所以+1

dp[i-j*j]+1是前面dp[i-j*j]這個數的完全平方數個數加j*j這乙個完全平方數,所以+1

dp[i−j

∗j]+

1是前面

dp[i

−j∗j

]這個數

的完全平

方數個數

加j∗j

這乙個完

全平方數

,所以+

1

class solution 

}return dp.back();

}};

279 完全平方數

給定正整數 n,找到若干個完全平方數 比如 1,4,9,16,使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12 輸出 3 解釋 12 4 4 4.示例 2 輸入 n 13 輸出 2 解釋 13 4 9.其中dp i 表示正整數i最少能由多個完全平方數組成,那麼我們...

279 完全平方數

給定正整數 n,找到若干個完全平方數 比如1,4,9,16,使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12輸出 3解釋 12 4 4 4.示例 2 輸入 n 13輸出 2解釋 13 4 9.動態規劃 class solution return dp n 使用佇列輔...

279 完全平方數

include include include using namespace std class solution return res int main 把這個問題轉換為乙個無權圖找最短路徑以後,因為有很多路徑可以到達乙個同乙個節點 12 1 11 4 7 12 4 8 1 7 比如12就可以通...