LeetCode367題:有效的完全平方數
阿新 • • 發佈:2018-12-26
這道題就是讓你寫一個函式用來判斷一個是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; }