• Java实现 LeetCode 279 完全平方数


    279. 完全平方数

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

    示例 1:

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

    输入: n = 13
    输出: 2
    解释: 13 = 4 + 9.

    PS:
    动态规划在数学面前一文不值

    任何正整数都可以拆分成不超过4个数的平方和 —> 答案只可能是1,2,3,4

    如果一个数最少可以拆成4个数的平方和,则这个数还满足 n = (4^a)*(8b+7)
    因此可以先看这个数是否满足上述公式,如果不满足,答案就是1,2,3了

    如果这个数本来就是某个数的平方,那么答案就是1,否则答案就只剩2,3了

    如果答案是2,即n=a2+b2,那么我们可以枚举a,来验证,如果验证通过则答案是2
    只能是3

    class Solution {
        public int numSquares(int n) {
                while(n%4==0)
                {
                    n/=4;
                }
                if(n%8==7)
                    return 4;
            
                int a=0;
                while((a*a)<=n)
                {
                    int b=(int)Math.pow((n-a*a),0.5);
                        if(a*a+b*b==n)
                        {
                            if(a!=0&&b!=0)
                            {
                                return 2;
                            }    
                            
                            else
                            {
                                return 1;
                            }
                        }
                    a++;
                }                 
                return 3;
        }
    }
    

    动态规划:

    class Solution {
          public int numSquares(int n) {
            int[] dp = new int[n+1];
            for(int i = 1; i <= n; i++){
                dp[i] = Integer.MAX_VALUE;
            }
            for(int i = 1; i <= n; i++){
                for(int j = 1; j*j <= i; j++){
                    if(i >= j*j){
                        dp[i] = Math.min(dp[i],dp[i-j*j]+1);
                    }
                }
            }
            return dp[n];
        }
    }
    
  • 相关阅读:
    模块
    匿名函数
    推导式
    函数 重点
    新的
    知识点补充
    unity学习规划与进度
    暂停·笔记
    解决问题__max 模型白色 材质球换没用
    Max__cs骨骼
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075281.html
Copyright © 2020-2023  润新知