leetcode#279 把正整數n拆分爲最少個數完全平方數-學會拆解出上一步

DP逆向思維,第n步的解怎麼由上一步來的呢?第n-1步經過某種變換到第n步。這題讓我們學會重新定義上一步,目標是將n拆分成若干個x^2之和,所以上一步應該是n-x^2,那麼如何確定這個x呢,回顧題目:你需要讓組成和的完全平方數的個數最少,好的,那就是使得Sn-x^2 + 1 最小的那個x,x^2在1-n之間,所以就遍歷好了~

class Solution {
public:
    int numSquares(int n) {
        vector<int> base = vector(n+1,INT_MAX);
        base[0] = 0;
        for(int i=1;i<=n;i++){
            for(int j=1;j*j<=i;j++){
                if(base[i-j*j]+1<base[i]) base[i] = base[i-j*j]+1;
            }
        }
        return base[n];
    
    }
};

 

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