[Leetcode解題] 367. Valid Perfect Square

10 January 2026
medium binary_search, bs

911. Online Election

題目

367. Valid Perfect Square

這題給一個正數字,要判斷是不是平方數

解題思路

這題我們就使用binary search找看有沒有相乘後剛好等於目標值的數字,有一個點是,因為有可能相乘後會超出int的範圍,如果用python的話沒有差別,但c++可能需要注意型別,使用long之類的來存。

又或者可以用除的方式來比較,當餘數等於0,且num//mid==mid的時候就return True

Python 實作

class Solution:
    def isPerfectSquare(self, num: int) -> bool:

        if num == 1:
            return True

        lb = 1
        ub = num // 2 + 1

        while lb < ub:
            mid = (lb+ub) // 2

            value = num // mid
            remainder = num % mid

            if value == mid and remainder == 0:
                return True
            elif value > mid or (value == mid and remainder > 0):
                lb = mid + 1
            else:
                ub = mid
        return False

時間複雜度

$O(logn)$