leetcode-633-Sum of Square Numbers

题目描述:

Given a non-negative integer c, your task is to decide whether there're two integers a and b such that a2 + b2 = c.

Example 1:

Input: 5
Output: True
Explanation: 1 * 1 + 2 * 2 = 5

 

Example 2:

Input: 3
Output: False

 

要完成的函数:

bool judgeSquareSum(int c) 

 

说明:

1、这道题给定一个非负整数c,要求判断c能不能拆成两个整数的平方和。

2、这道题我们可以用判断法也可以用生成法,但这道题用生成法来做,时间复杂度比较高,还不如用判断法来做。

我们先找到有可能的整数的上限,比如要判断的数c是27,那么整数上限就是5。

再定义一个下限,从0开始。

我们判断上限和下限的平方和,大于还是小于,或者是等于c。

如果大于c的话,那么上限要减一。

如果小于c的话,那么下限要加一。

如果等于,那么返回true。

最终如果下限超过上限,那么返回false。

 

用这种寻找-判断的方法来做,是比较快的方法。

如果同学有更快的方法,欢迎分享在评论区~~

代码如下:

    bool judgeSquareSum(int c) 
    {
        int uplim=floor(sqrt(c)),lowlim=0,t;//uplim是上限,lowlim是下限,从0开始
        while(lowlim<=uplim)//退出循环条件是下限超过上限
        {
            t=lowlim*lowlim+uplim*uplim;
            if(t<c)
                lowlim++;
            else if(t>c)
                uplim--;
            else
                return true;
        }
        return false;
    }

上述代码实测6ms,beats 87.28% of cpp submissions。

posted @ 2018-06-15 14:37  chenjx85  阅读(118)  评论(0编辑  收藏  举报