279. 完全平方數(shù)

https://leetcode-cn.com/problems/perfect-squares/
給定正整數(shù) n,找到若干個完全平方數(shù)(比如 1, 4, 9, 16, ...)使得它們的和等于 n。你需要讓組成和的完全平方數(shù)的個數(shù)最少。

我一開始想的是動態(tài)規(guī)劃
自己沒有寫就搬運了別人的
但dp的時間復雜度硬傷

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

居居的方法:廣搜
居居:“dp的時間復雜度太高了?!?br> but事實是用時上廣搜也沒好到哪里去并且debug用了相當久……

class Solution {
public:
    struct node{
        int x,f;
    };
    queue<node> q;
    int numSquares(int n) {
        int vis[1000005]={0};
        node a,p;
        a.x=n;
        a.f=0;
        q.push(a);
        vis[n]=1;
        while(!q.empty()){
            a=q.front();
            q.pop();
            for(int i=1;i*i<=n;i++){
                int t=a.x-i*i;
                if(t==0)return a.f+1;
                if(t>0&&!vis[t]){
                    p.x=t;
                    p.f=a.f+1;
                    vis[t]=1;
                    q.push(p);
                }
            }
        }
        return 0;
    }
};

最后發(fā)現(xiàn)這是個數(shù)學問題……
四平方定理: 任何一個正整數(shù)都可以表示成不超過四個整數(shù)的平方之和。
推論:滿足四數(shù)平方和定理的數(shù)n(四個整數(shù)的情況),必定滿足 n=4^a(8b+7)
看到的證明清晰且有拓展的網(wǎng)站:https://www.changhai.org/articles/science/mathematics/four_square_theorem.php

class Solution {
public:
    int numSquares(int n) {
        while(n%4==0)n/=4;
        if(n%8==7)return 4;
        for(int a=0;a*a<=n;a++) {
            int b=sqrt(n-a*a);
            if(a*a+b*b==n){
                if(!a||!b)
                    return 1;
                return 2;
            }
        }
        return 3;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目描述 給定正整數(shù) n,找到若干個完全平方數(shù)(比如 1, 4, 9, 16, ...)使得它們的和等于 n。你需...
    莫小鵬閱讀 1,171評論 0 0
  • 這是所有類型里我覺得最有趣的一個類型,哈哈。來被虐一下。 258. Add Digits 數(shù)字根的性質(zhì): 任何數(shù)字...
    __小赤佬__閱讀 467評論 0 0
  • 迫于就業(yè)的壓力,不得不先放下 iOS 開發(fā)的學習,開始走上漫漫刷題路。 今天我想聊聊 LeetCode 上的第27...
    諸葛俊偉閱讀 5,103評論 1 5
  • Pythagoras 畢達哥拉斯 Birth c. 580 BC – 572 BC Death c. 500 BC...
    123逍遙游閱讀 1,825評論 0 0
  • 多知天氣 前言 項目:https://github.com/w77996/Weather 多知天氣,代碼寫的不咋的...
    w77996閱讀 11,262評論 11 43

友情鏈接更多精彩內(nèi)容