給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, …)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。
示例 1:
輸入: n =
12輸出:
3
解釋: 12 = 4 + 4 + 4.
示例 2:
輸入: n =
13輸出:
2
解釋: 13 = 4 + 9.
動態規劃
設定dp陣列,對小於n的每個平方數設定dp=1;
從2開始遍歷每個數,對每個數再列舉每種平方數的湊法;
最後返回dp[n]即為答案;
class
solution
for(
int i=
2;i<=n;i++
)return dp[n];}
private
: vector<
int> dp;
};
貪心演算法
遞迴實現對最少次數的列舉;
(1)將小於等於n的平方數全部儲存在map中;
(2)最少數從1開始,遞迴得到最少樹——每次遞迴遍歷map;
(3)遞迴終止條件——cnt==1時;
class
solution
private
: unordered_map<
int,
bool
> map;
bool
istrue
(int n,
int cnt)
};
bfs+貪心class
solution
} queue=next_queue;}}
private
: set<
int> queue;
vector<
int> cut;
};
注意點:使用兩個set,代替queue,可有效去重,加快速度; 279 完全平方數(BFS)
給定正整數 n,找到若干個完全平方數 比如 1,4,9,16,使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。這題有兩種解法,bfs 動態規劃 1 這題用bfs解題的關鍵是如何把題目要求轉換成資料結構 圖 我們這裡用的轉換條件是以0作為根節點,它的子節點應該滿足 i i 0 poll 被...
動態規劃 貪心
區別 動態規劃 全域性最優解中一定包含某個區域性最優解,但不一定包含前乙個區域性最優解,因此需要記錄之前的所有最優解。條件 最優子結構 重疊子問題。方法 自底向上構造子問題的解。例子 子串行最大和問題,滑雪問題 貪心演算法 條件 每一步的最優解一定依賴上一步的最優解。方法 從問題的某乙個初始解出發逐...
動態規劃和貪心
貪心演算法是種策略,思想。它並沒有固定的模式 比如最簡單的揹包問題 用貪心的思想去做,就可能有很多種方法 價效比最高的 價值最高的 重量最輕的 而你沒辦法確保你所選擇的貪心策略對所有的情況都是絕對最優的 動態規劃的思想是分治 解決沉餘 把乙個複雜的問題分解成一塊一塊的小問題 每乙個小問題中得到最優解...