Leetcode

367. Valid Perfect Square

Leeter 2021. 11. 12. 10:55

Description:

Given a positive integer num, write a function which returns True if num is a perfect square else False.

Follow up: Do not use any built-in library function such as sqrt.

'''
[1] brute force)

code::
def isPerfectSqurare(num):
    for i in range(1,num):
        if i*i==num:
            return True
        elif i*i>num:   # optimization
            break
    return False
    
-T/C: O(n)
-S/C: O(1)
'''

'''
[2] brute force - optimization)

code::
def isPerfectSquare(self, num: int) -> bool:
    i=1
    while i*i<=num:
        if i*i==num:
            return True
        else:
            i+=1
    return False
    
-T/C: O(n^(1/2))
-S/C: O(1)
'''

'''
[3] binary search)

code::
def isPerfectSquare(self, num: int) -> bool:
    left,right=1,num

    while left<=right:
        mid=(left+right)//2
        if mid*mid==num:
            return True
        elif mid*mid>num:
            right=mid-1
        else:
            left=mid+1
    return False

-T/C: O(logn)
-S/C: O(1)
'''

class Solution:
    def isPerfectSquare(self, num: int) -> bool:
        left,right=1,num
        
        while left<=right:
            mid=(left+right)//2
            if mid*mid==num:
                return True
            elif mid*mid>num:
                right=mid-1
            else:
                left=mid+1
        return False