zoukankan      html  css  js  c++  java
  • 63.Perfect Squares(完美平方数)

    Level:

      Medium

    题目描述:

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.

    Example 1:

    Input: n = 12
    Output: 3 
    Explanation: 12 = 4 + 4 + 4.
    

    Example 2:

    Input: n = 13
    Output: 2
    Explanation: 13 = 4 + 9.
    

    思路分析:

      根据四平方和定理,任意一个正整数均可表示为4个整数的平方和,其实是可以表示为4个以内的平方数之和,那么就是说返回结果只有1,2,3或4其中的一个,首先我们将数字化简一下,由于一个数如果含有因子4,那么我们可以把4都去掉,并不影响结果,比如2和8,3和12等等,返回的结果都相同,读者可自行举更多的栗子。还有一个可以化简的地方就是,如果一个数除以8余7的话,那么肯定是由4个完全平方数组成,这里就不证明了,因为我也不会证明,读者可自行举例验证。那么做完两步后,一个很大的数有可能就会变得很小了,大大减少了运算时间,下面我们就来尝试的将其拆为两个平方数之和,如果拆成功了那么就会返回1或2,因为其中一个平方数可能为0.

    代码:

    public class Solution{
        public int numSquares(int n){
            //首先将数字化简
            while(n%4==0){
                n=n/4;
            }
            if(n%8==7)
                return 4;
            for(int a=0;a*a<=n;a++){
                int b=(int)Math.sqrt(n-a*a);
                if(a*a+b*b==n){
                    if(a==0||b==0)
                        return 1;
                    else
                        return 2;
                }
            }
            return 3;
        }
    }
    
  • 相关阅读:
    B/S 和 C/S
    SQL 注入
    软件测试
    Spring的注解方式
    测试开发题目
    策略模式
    设计模式
    单例模式
    读写文件
    对List里的对象元素进行排序
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11090409.html
Copyright © 2011-2022 走看看