Leetcode典型題解答和分析、歸納和彙總——T279(完全平方數)

問題分析:

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

問題分析:

這是一個典型的動填規劃問題。關鍵在於如何查找動態轉移方程,我們假設前面的已經知道最小的個數dp[i],然後繼續求解dp[i-j*j]+1這個數的最小值。

class Solution {
public:
    int numSquares(int n) {
       vector<int> dp(n+1,0);

       for(int i=1;i<=n;i++)
       {
         dp[i]=i; //最多是全部由1組成
         for(int j=1;i-j*j>=0;j++)
         {
           dp[i] = min(dp[i],dp[i-j*j]+1);  //表示狀態轉移方程,保存當前這個數被分解的的最小值
         }
       }
       return dp[n];
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章