[LeetCode][Python]367. Valid Perfect Square

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

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

Example 1:

Input: 16
Returns: True

Example 2:

Input: 14
Returns: False

思路:所謂perfect Square,A perfect square is a number that can be expressed as the** product of two equal integers**.

可以參照perfect number的思路,從1到sqrt(num)依次比對,后來發(fā)現(xiàn)會提前跳出循環(huán)。突然靈機一動,想出了個取巧的方法。使用Python的**0.5代替sqrt,能被accept,不過好像還是不滿足題目要求。

看了其他人的思路,發(fā)現(xiàn)還有一個牛頓法,以及二分法查找。二分法查找倒是非常直觀。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
class Solution(object):
    def isPerfectSquare(self, num):
        """
        :type num: int
        :rtype: bool
        """
        return (int(num**0.5)**2)==num

    def isPerfectSquare2(self, num):
        res = num
        while(res*res > num):
            res = (res + num/res) >> 1

        return res*res == num

    def isPerfectSquare3(self, num):
        res = num
        while res*res > num:
            res = (res + num/res)/2
        return res*res == num

    def isPerfectSquare4(self, num):
        low = 1
        high = num
        while(low < high):
            mid = (low + high)/2
            if(mid*mid>num):
                high = mid -1
            elif(mid*mid<num):
                low = mid + 1
            else:
                return True

        return False



if __name__ == '__main__':
    sol = Solution()
    print sol.isPerfectSquare(4)
    print sol.isPerfectSquare(16)
    print sol.isPerfectSquare(14)

    print sol.isPerfectSquare(8)
    print sol.isPerfectSquare(36)

    print sol.isPerfectSquare2(16)
    print sol.isPerfectSquare3(16)

    print sol.isPerfectSquare4(16)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • 不知不覺,日志已經100篇。想起了剛寫的時候還跟朋友開玩笑,我要寫到100篇。當時的狀態(tài)是每天會看看書,情緒高漲,...
    他說他的不說閱讀 218評論 0 0
  • 1、先講一個故事。 傳說西塔發(fā)明了國際象棋而使國王十分高興,他決定要重賞西塔,西塔說:“我不要你的重賞 ,陛下,只...
    黃圈圈閱讀 643評論 0 1
  • oc用法 [DatePickerViewshowDatePickerWithTitle:@"出生年月"dateTy...
    雪鷹_007閱讀 1,404評論 0 0