leetcode_633 平方数之和

75 阅读1分钟

要求

给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。

示例 1:

输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5

示例 2:

输入:c = 3
输出:false

示例 3:

输入:c = 4
输出:true

示例 4:

输入:c = 2
输出:true

示例 5:

输入:c = 1
输出:true

提示:

  • 0 <= c <= 231 - 1

核心代码

class Solution:
    def judgeSquareSum(self, c: int) -> bool:
        begin,end = 0,int(math.sqrt(c))
        while begin <= end:
            if begin ** 2 + end ** 2 >c:
                end -= 1
            elif begin ** 2 + end ** 2 < c:
                begin += 1
            else:
                return True
        return False

另一解法

class Solution:
    def judgeSquareSum(self, c: int) -> bool:
        if c == 0:
            return True
        for i in range(int(c ** 0.5) + 1):
            num = c - i * i 
            if int(num ** 0.5) == num ** 0.5:
                return True
        return False

第三种解法

class Solution:
    def judgeSquareSum(self, c: int) -> bool:
        if not c:
            return True
        k = int(math.sqrt(c))
        l = int(math.sqrt(c // 2))
        for i in range(k,l - 1,-1):
            m = math.sqrt(c - i * i)
            if int(m) == m:
                return True
        return False

image.png

解题思路:第一种解法:我们使用左右指针的方式,和超过减小右边,和没超过增大左边,和刚好则此数是平方数之和;第二种解法:直接使用int的方法进行判断数的开方是否相同,思路比较简单;第三种解法:在第二种解法的基础上限定了范围,免去了无用的循环,效率更高。