LeetCode-367-有效的完全平方數

雄獅虎豹發表於2021-09-30

有效的完全平方數

題目描述:給定一個 正整數 num ,編寫一個函式,如果 num 是一個完全平方數,則返回 true ,否則返回 false 。

完全平方數:完全平方指用一個整數乘以自己例如1*12*23*3等,依此類推。若一個數能表示成某個整數的平方的形式,則稱這個數為完全平方數。完全平方數是非負數,而一個完全平方數的項有兩個。

進階不要 使用任何內建的庫函式,如 sqrt 。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:二分查詢法

用二分查詢的方法來尋找num的開方是否是一個整數。首先,宣告low為0,high為最大整數的平方根,二分查詢的過程如下:

  • 首先,low不大於high;
  • 宣告一個mid,mid等於(low + high) / 2
  • 如果mid * mid == num,則說明num是一個完全平方數,直接返回true;
  • 如果mid * mid > num,則將high設定為mid - 1,然後進行下一輪處理;
  • 如果mid * mid < num,則將low設定為mid + 1,然後進行下一輪處理。

最後,如果沒找到整數的平方等於num,則說明num不是一個完全平方數,返回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));
    }
}
【每日寄語】 願你忠於自己,活的認真;笑得放肆。

相關文章