LeetCode367题:有效的完全平方数

这道题就是让你写一个函数用来判断一个是num是否为某个数m的平方的。

解法一:暴力搜索法

判断一个数是不是某个数的平方,暴力一点的想法,就是从i = 1开始循环,如果i*i小于num,则i++;如果等于num,则返回true;如果大于num,则返回false。

public static boolean isPerfectSquare(int num) {
        if(num <= 0)
        	return false;
        if(num == 1)
        	return true;
		for(int i=1;i<num;i++){
        	if(i*i < num){
        		continue;
        	}else if(i*i == num){
        		return true;
        	}else{
        		return false;
        	}
        }
        return false;
    }

解法二:公式法

如果一个数num是完全平方数,那么一定存在一个n使得1+3+5+...+n = num。

public static boolean isPerfectSquare1(int num) {
        if(num <= 0)
        	return false;
        if(num == 1)
        	return true;
        int sum = 1;
        while(num > 0){
        	num -= sum;
        	sum += 2;
        }
        return num == 0;
    }

解法三:双指针二分逼近法

思路是使用左右两个指针 left 和 right 来表示从1到num之间的两个数,并计算mid = (left+right)/2,如果mid*mid == num则返回true;如果小于num,则说明如果存在一个数n使得n*n == num的话,那么n一定大于mid,所以修改left = mid+1进行下一次比较;同理,如果大于num,则修改right = mid-1。(不要使用left = left+1这种方式,这样就失去二分的效果了)

public static boolean isPerfectSquare2(int num) {
        if(num <= 0) 
            return false;
        if(num == 1) 
            return true;
        long l=1, r = num/2; 
        long mid, midSq;
        while(l <= r){
            mid = (l + r)/2;
            midSq = mid * mid;
            if(midSq == num) return true;
            if(midSq < num) l = mid+1;
            else r = mid-1;
        }
        return false;
    }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值