Python算法:判斷平方數與求平方根

判斷平方數

1、問題描述

給定一個正整數num ,判斷是否爲完全平方數,要求當num爲完全平方數時返回True,否則返回False

2、問題示例

輸入num=16,輸出True,sqrt(16)=4;輸入num=15,輸出False,sqrt(15)=3.87。

3、代碼實現

# 參數 num 是一個正整數
# 返回值時一個布爾值,如果num是完全平方數就返回True,否則返回False。
class Solution():
	def isPerfectSquare(self, num):
		l = 0 
		r = num
		while (l - r > 1): # 當左值l 與右值r 是非相鄰數字時:
			mid = ( l + r ) / 2  # 取中值
			if (mid * mid <= num): # 如果mid的平方數小於或者等於num,表示我們要找的數比這個數大
				l = mid # 縮小範圍,爲了尋找更大的數
			else: # 如果mid的平方數大於num,表示我們要找的那個數比這個數小
				r = mid # 爲了尋找更小的數
		ans = l # 如果存在mid*mid=num,則會將mid賦值給l,所以ans的初始值爲l
		if (l * l < num): # 但如果l*l的值小於num,代表我們要找的數可能是r
			ans = r
		return ans * ans == num # 如果找到了平方數,則返回True

if __name__ == '__main__':
	num = 16
	print("initial value: ", num)
	solution = Solution()
	print("result: ", solution.isPerfectSquare(num))

4、運行結果

initial value: 16
result: True

5、分析

本人覺得這個算法可能包含兩種思維:1、二分法;2、極限

  1. 二分法:取中值的方法可以更快地進行序列查找
  2. 極限:作爲二分查找的終止條件,當二分法左右兩個基數的距離小於1時,題目所需的正整數已經被遍歷完畢。

求平方根

1、問題描述

實現 int sqrt(int x)函數,計算並返回 x 的平方根。

2、 問題示例

sqrt(3) = 1; sqrt(4) = 2; sqrt(5) = 2; sqrt(10) = 3;

3、代碼實現

class Solution():
    def _sqrt(self, x):
        # 設置左右兩個數 分別爲0與x
        l, r = 0, x
        # 循環直至 l 與 r 是相鄰的兩個數
        while l + 1 < r:
            # 地板除 向下取整 m爲中位數
            m = (r + l) // 2
            if m * m == x:
                return m
            # 如果m的平方大於x,代表我們要找的數在m左方
            elif m * m > x:
            # 所以將右邊的數賦值爲m,縮小範圍
                r = m
            else:
                l = m
        # 退出循環時,l與r爲相鄰的數。
        if l * l == x:
            return l
        if r * r == x:
            return r
        # 如果都不是則取l返回(一定小於x)
        return l

if __name__ == '__main__':
    temp = Solution()
    x1 = 16
    x2 = 10
    print("輸入:" + str(x1))
    print("輸出:" + str(temp._sqrt(x1)))
    print("輸入:" + str(x2))
    print("輸出:" + str(temp._sqrt(x2)))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章