LeetCode367 有效的完全平方数

原题目

给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16
输出:True
示例 2:
输入:14
输出:False

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-perfect-square

题目分析

方法一,顺序查找法:
从零开始一直查到sum,
改进:
测试用例会出现整形的最大数值,所以用if(i*i==sum)显示错误,要么改为long long型比较,要么用在本身的基础上加以改进,用pow(i,2)也可以比较
方法二,二分查找法:
方法三,数学规律法:
每一个数的平方与前一个数的平方差是公差为2 的等差数列
1 * 1=1
2 * 2=4
3 * 3=9
4 * 4=16
a1=3 a2=5 a3=7 d=2
利用 1+3+5+7+9+…+(2n-1)=n^2,即完全平方数肯定是前n个连续奇数的和

完整代码

顺序查找法:

bool isPerfectSquare(int num){
    for(int i=1;i<=num;i++)
        if(i<num/i)continue;
        else if(num==(num/i)*(num/i))
            return true;
        else
            return false;
    return false;
}

二分查找法:

bool isPerfectSquare(int num) {
        int start=1;
        int end=num;
        int mid=start+(end-start)/2;
        while(start<=end)
        {
            if(pow(mid,2)>num)
            {
                end=mid-1;
            }
            else if(pow(mid,2)<num)
            {
                start=mid+1;
            }
            else return true;
            mid=(end-start)/2+start;
        }
        return false;
}

数学规律法:

bool isPerfectSquare(int num){
    int s=num;
    int i=1;
    while(s>0)
    {
        s=s-i;
        i=i+2;
    }
    if(s==0)return true;
    else return false;
}
总结

扩展数学思维

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baal Austin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值