判断平方数
问题描述:
给定一个正整数num,判断是否为完全平方数,要求当num为完全平方数时返回True,否则返回False。
问题示例:
输入num = 16,输出True,sqrt(16) = 4;输入num = 15, 输出False,sqrt(15) = 3.87。
解题思路:
1、 二分查找,在数1-num中找到数num的开方值,要是存在,返回true,否则返回false.
代码如下:
#参数num是一个正整数
#返回值是一个布尔值,如果num是完全平方数就返回True,否则返回False
class Solution2:
def isPerfestSquare(self,num):
l = 0
r = num
while(r - l > 1):
mid = (l + r) / 2
if(mid * mid <= num ):
l = mid
else:
r = mid
ans = l
if(l * l < num):
ans = r
return ans * ans == num
n=16
print("初始值:",n)
soluttion = Solution2()
print("结果:",soluttion.isPerfestSquare(n))
2、 利用sqrt函数得到的结果与其取整后得到的结果相比较,即可判断:
代码如下:
import math
class Solution2_sq:
def isPerfectSquare_sq(self, n):
"""利用sqrt函数"""
m = math.sqrt(n)
if int(m) * 10 == m * 10:
return True
else:
return False
n=16
print("初始值:",n)
soluttion = Solution2_sq()
print("结果:",soluttion.isPerfestSquare_sq(n))
3、等差数列法
我们就来看看一个等差数列,a0=1,,d=2,那么an=2*n-1.对这个等差数列求和如下:
发现,这个等差数列求和结果正好是n的平方,那么也就是说任何一个平方数都可以拆分成一个等差数列求和!
应用这个思想来解决上面的题目,需要注意的是:等差数列初值为a0=1,等差d=2。
class Solution2_seq:
def isPerfestSquare_seq(self,num):
i = 1
while(num > 0):
num -= i
i +=2
return num == 0
n=16
print("初始值:",n)
soluttion = Solution2_seq()
print("结果:",soluttion.isPerfestSquare_seq(n))