LeetCode:判断一个正整数是否为完全平方数

Given a positive integer num,write a function which returns True if num is a perfect
square else False.
Note:Do not use any built-in library function such as sqrt.

Example 1:
Input:16
Output:true

Example 2:
Input:14
Output:false

题目大意:
判断给定的正整数是否为完全平方数.不能使用库自带的函数.

解题思路:
这道题用枚举法的时间复杂度是O(n),所以暂时不考虑.根据数组是有序的可以利用二分搜索来解答.
根据它的定义,是否能被开根号,即找到一个数的平方是否可以等于待判断的数字,从[1,n]区间内
进行二分,若能找到则返回true,否则false.
还有一个简单的方法是,根据数字公式推理得到,满足完全平方的数一定满足前n个奇数的和:
4=1+3;
9=1+3+5;
16=1+3+5+7;
package main

import "fmt"

func isPerfectSquare(num int)bool{
	/*
	flag,l,r,board:=false,1,num>>1,0
	if num==1{
		return true;
	}
	for l<r{
		fmt.Println(l," ",r," ",board)
		if r*r==num{
			flag=true
			break
		}else if r*r<num{
			l,r=r,board
		}else{
			board=r
			r=l+(r-l)>>1
		}
	}
	return flag
	*/
	 /*可以较为简练点*/
	low,high,mid:=0,num,0
	for low<=high{
		mid=low+(high-low)>>1
		if mid*mid==num{
			return true
		}else if mid*mid<num{
			low=mid+1
		}else{
			high=mid-1
		}
	}
	return false
}

func isPerfectSquare1(num int)bool{
	i:=1
	for num>0{
		num-=i
		i+=2
	}
	return num==0
}
func main(){
	fmt.Println(isPerfectSquare(7))
	fmt.Println(isPerfectSquare1(7))
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路上的追梦人

您的鼓励就是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值