问题:判断平方数

判断平方数

问题描述:
给定一个正整数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))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值