給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, …)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。
示例 1:
輸入: n = 12
輸出: 3
解釋: 12 = 4 + 4 + 4.
示例 2:
輸入: n = 13
輸出: 2
解釋: 13 = 4 + 9.
本題等價於求最短路徑的問題。將每個整數當成乙個樹的節點,下乙個節點值為當前節點值減去在平方數列表squares
中的乙個值,這樣就能形成一棵樹,當下乙個節點值為0時說明找到了一種平方數的組合,通過bfs可以求得最短路徑,也就是求得最短得組合大小。
class
solution
// 2. 將整數看成乙個節點如果兩個整數相減為乙個平方數
// ,則兩個整數所在節點存在一條邊
boolean
seen =
newboolean
[n +1]
; queue
queue =
newlinkedlist
<
>()
; queue.
offer
(n);
seen[n]
=true
;int level =0;
while
(!queue.
isempty()
)}}return n;
}}
假設n為5
0:01:1
2:1+1
3: 1+1+1
4: 1+1+1+1 、 4
5: 1+4、1+1+1+1
class
solution
// 設定狀態dp[i]表示數字夠成數字i所使用的完全平方數的個數, dp[0] = 0
int[
] dp =
newint
[n+1];
for(
int i =
1; i <= n; i++
) dp[i]
= min;
}return dp[n];}
}
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...
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...