有效的完全平方數(shù)
題目描述:給定一個 正整數(shù) num 扇救,編寫一個函數(shù)刑枝,如果 num 是一個完全平方數(shù),則返回 true 迅腔,否則返回 false 装畅。
完全平方數(shù):完全平方指用一個整數(shù)乘以自己例如
1*1
,2*2
沧烈,3*3
等掠兄,依此類推。若一個數(shù)能表示成某個整數(shù)的平方的形式锌雀,則稱這個數(shù)為完全平方數(shù)蚂夕。完全平方數(shù)是非負數(shù),而一個完全平方數(shù)的項有兩個腋逆。進階:不要 使用任何內(nèi)置的庫函數(shù)婿牍,如 sqrt 。
示例說明請見LeetCode官網(wǎng)惩歉。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-perfect-square/
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有等脂。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處撑蚌。
解法一:二分查找法
用二分查找的方法來尋找num的開方是否是一個整數(shù)上遥。首先,聲明low為0争涌,high為最大整數(shù)的平方根粉楚,二分查找的過程如下:
- 首先,low不大于high亮垫;
- 聲明一個mid解幼,mid等于
(low + high) / 2
;- 如果
mid * mid == num
包警,則說明num是一個完全平方數(shù)撵摆,直接返回true;- 如果
mid * mid > num
害晦,則將high設(shè)置為mid - 1
特铝,然后進行下一輪處理;- 如果
mid * mid < num
壹瘟,則將low設(shè)置為mid + 1
鲫剿,然后進行下一輪處理。最后稻轨,如果沒找到整數(shù)的平方等于num灵莲,則說明num不是一個完全平方數(shù),返回false殴俱。
public class LeetCode_367 {
/**
* 二分查找法
* @param num
* @return
*/
public static boolean isPerfectSquare(int num) {
int low = 1, high = (int) Math.sqrt(Integer.MAX_VALUE);
while (low <= high) {
int mid = (low + high) / 2;
if (mid * mid == num) {
return true;
} else if (mid * mid > num) {
high = mid - 1;
} else if (mid * mid < num) {
low = mid + 1;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(isPerfectSquare(14));
}
}
【每日寄語】 愿你忠于自己政冻,活的認真;笑得放肆枚抵。