题目来源:
leetcode题目,网址:367. 有效的完全平方数 - 力扣(LeetCode)
解题思路:
首先获取 int 范围内的所有大于0的完全平方数,然后按照判断所给数是否在其中即可。
解题代码:
class Solution {
Set<Integer> set;
public Solution(){
set=new HashSet<Integer>();
int i=1;
while( (i-1)*(i-1) <= i*i){
set.add(i*i);
i++;
}
}
public boolean isPerfectSquare(int num) {//num>=1
return set.contains(num);
}
}
//二分查找
class Solution {
public boolean isPerfectSquare(int num) {//num>=1
if(num==1)
return true;
int left=1;
int right=num/2;
while(left<=right){
int mid=left+(right-left)/2;
if(( ((double) mid) *mid)==num)//防止溢出
return true;
else if( (((double) mid) *mid)>num){
right=mid-1;
}else{
left=mid+1;
}
}
return false;
}
}
总结:
这题应该是按照二分查找思想解题较好。
官方题解除了给出以上两种办法外,还给出了牛顿迭代法。