leetcode 367.有效的完全平方数

leetcode 367.有效的完全平方数

题目描述

给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。

说明: 不要使用任何内置的库函数,如 sqrt。

示例 1:
输入:16
输出:True

示例 2:
输入:14
输出:False

解题思路

完全平方数是指一个正整数开方后还是一个正整数(若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数)

方法一: 暴力求解,从1~num可以遍历,计算n*n是否等于num

class Solution {
public:
    bool isPerfectSquare(int num) {
        if(num <= 0){
            return false;
        }
        long i = 1;
        while(i*i <= num){
            if(i*i == num){
                return true;
            }
            i++;
        }
        return false;
    }
};

方法二: 使用二分查找,计算n*n是否等于num

class Solution {
public:
    bool isPerfectSquare(int num) {
        long l = 1, r = num;
        
        while(l < r){
            long mid = l+((r-l)>>2);
            if(mid*mid < num){
                l = mid+1;
            }
            else{
                r = mid;
            }
        }
        return num == l*l;
    }
};

方法三: 数学计算
n 2 = 1 + 3 + 5 + 7 + . . . + ( 2 n − 1 ) n^2 = 1+3+5+7+...+(2n-1) n2=1+3+5+7+...+(2n1)
完全平方数是前n个连续奇数的和

class Solution {
public:
    bool isPerfectSquare(int num) {
        long sum = 1;
        int odd = 3;
        while(sum < num){
            sum += odd;
            odd += 2;
        }
        return sum == num;
    }
};

欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值