367. Valid Perfect Square

来源:互联网 发布:招标投标软件 编辑:程序博客网 时间:2024/05/09 19:03



题目:

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: 16Returns: True

Example 2:

Input: 14Returns: False

我的答案是:

public class Solution {    public boolean isPerfectSquare(int num) {        long lo = 1;        long hi = num/2;        if(num==1) return true;        long nums = (long)num;        while(lo<=hi){            long mid = lo + (hi-lo)/2;            if(mid*mid>nums) hi = mid-1;            if(mid*mid<nums) lo = mid+1;            if(mid*mid==nums) return true;        }        return false;    }}
开始的时候test 808201没有过,是因为我把lo, hi 以及mid全都定义成了int,但是实际上,当num=808201的时候, in test cases like 808201, when we calculate mid value , it comes out to be 404101. So, when we do mid*mid, it goes completely out of int range, hence I used long datatype. 所以需要定义成long,否则算出来的答案不对。

整体的思路没有问题!是自己写出来的!









0 0