zoukankan      html  css  js  c++  java
  • 队列&栈//完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

    示例 1:

    输入: n = 12
    输出: 3 
    解释: 12 = 4 + 4 + 4.

    示例 2:

    输入: n = 13
    输出: 2
    解释: 13 = 4 + 9.
    class Solution {
    public:
        int numSquares(int n) {
            while(n%4==0) n/=4;
            if(n%8==7) return 4;
            for(int i=0;i*i<=n;i++){
                int j=sqrt(n-i*i);
                if(i*i+j*j==n)
                    {
                        return !!i+!!j;
                    }
            }
            return 3;
        }
    };
    class Solution {
    public:
        int numSquares(int n) {
            vector<int> dp(n+1,INT_MAX);
            dp[0] = 0;
            for(int i = 0; i <= n; i++){
                for(int j = 1; j*j+i <= n; j++){
                    dp[i+j*j] = min(dp[i+j*j],dp[i]+1);
                }
            }
            return dp[n];//return dp.back()也可以
        }
    };
    class Solution {
    public:
        int numSquares(int n) {
            vector<int> dp(1,0);
            while(dp.size() <= n){
                int m = dp.size(), val = INT_MAX;
                for(int i = 1; i * i <= m; i++){
                    val = min(val, dp[m-i*i]+1);
                }
                dp.push_back(val);
            }
            return dp.back();
        }
    };
    class Solution {
    public:
        int numSquares(int n) {
            int dp[n];
            memset(dp,0,n*sizeof(n));
            int res=dfs(n,0,dp);
            return res;
        }
    private:
        int dfs(int n,int count,int *dp){
            if(n==0) return count;
            int c=0;
            if((c=dp[n-1])!=0)
                return count+c;
            int res=INT_MAX;
            int j=(int)sqrt(n);
            for(int i=j;i>=(j/2+1);i--){
                int num=n-pow(i,2);
                int c=dfs(num,count+1,dp);
                res=min(res,c);
            }
            dp[n-1]=res-count;
            return res;
        }
    };
  • 相关阅读:
    GridView跨列
    html的积累
    什么是json?
    关于string
    Effective C# Item38:定制和支持数据绑定
    Effective C# Item44:为应用程序创建特定的异常类
    Effective C# Item42:利用特性简化反射
    Effective C# Item47:选择安全代码
    Effective C# Item43 : 避免过度使用反射
    Effective C# Item39 : 使用.NET验证
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602367.html
Copyright © 2011-2022 走看看