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];
    }
};

 

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