1 package day20170206; 2 //LeetCode:367. Valid Perfect Square 3 /* 4 Given a positive integer num, write a function which returns True if num is a perfect square else False. 5 6 Note: Do not use any built-in library function such as sqrt. 7 8 Example 1: 9 Input: 16 10 Returns: True 11 Example 2: 12 Input: 14 13 Returns: False 14 */ 15 public class isPerfectSquare367 { 16 public static boolean isPerfectSquare(int num) { 17 for(int i=1;i<=num/2+1;i++){ 18 if(i*i==num) 19 return true; 20 else if(i*i>num) 21 return false; 22 } 23 return false; 24 } 25 //study1 1+3+5+...+(2n-1)=n^2 26 public static boolean isPerfectSquare2(int num){ 27 for(int i=1;num>0;i+=2){ 28 num-=i; 29 } 30 return num==0; 31 } 32 //study2 binary search 33 public static boolean isPerfectSquare3(int num){ 34 int left=1,right=num; 35 if(num<1) 36 return false; 37 while(left<=right){ 38 int mid=left+(right-left)/2; 39 if(mid*mid==num){ 40 return true; 41 } 42 else if(mid*mid>num){ 43 right=mid-1; 44 }else{ 45 left=mid+1; 46 } 47 } 48 return false; 49 } 50 //Newton Method 51 public static boolean isPerfectSquare4(int num){ 52 if(num<0) 53 return false; 54 int n=num/2; 55 while(n*n>num){ 56 n=(n+num/n)/2; 57 } 58 return n*n==num; 59 } 60 61 62 public static void main(String[] args) { 63 // TODO Auto-generated method stub 64 System.out.println(isPerfectSquare(16)); 65 System.out.println(isPerfectSquare(11)); 66 System.out.println(isPerfectSquare(1)); 67 68 System.out.println(isPerfectSquare2(16)); 69 System.out.println(isPerfectSquare2(11)); 70 System.out.println(isPerfectSquare2(1)); 71 72 System.out.println(isPerfectSquare3(16)); 73 System.out.println(isPerfectSquare3(11)); 74 System.out.println(isPerfectSquare3(1)); 75 76 } 77 78 }