前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-633-Sum of Square Numbers

leetcode-633-Sum of Square Numbers

作者头像
chenjx85
发布2018-07-05 16:15:07
2770
发布2018-07-05 16:15:07
举报

题目描述:

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:

代码语言:javascript
复制
Input: 5
Output: True
Explanation: 1 * 1 + 2 * 2 = 5

Example 2:

代码语言:javascript
复制
Input: 3
Output: False

要完成的函数:

bool judgeSquareSum(int c) 

说明:

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

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

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

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

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

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

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

如果等于,那么返回true。

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

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

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

代码如下:

代码语言:javascript
复制
    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。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档