633. Sum of Square Numbers

class Solution:
    def judgeSquareSum(self, c: int) -> bool:

        # def search(a):
        #     l, r = 0, math.sqrt(c)

        #     while l <= r:
        #         m = (l + r) // 2
        #         # print(m ** 2, a)
        #         if m ** 2 + a == c:
        #             return True
        #         elif m ** 2 + a < c:
        #             l = m + 1
        #         else:
        #             r = m - 1

        #     return False
        
        # i = 0

        # while i ** 2 <= c:
        #     if search(i ** 2):
        #         return True
        #     i += 1

        # return False


        l, r = 0, int(sqrt(c))


        while l <= r:
            if l ** 2 + r ** 2 == c:
                return True
            elif l ** 2 + r ** 2 < c:
                l += 1
            else:
                r -= 1

        return False