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

有效的完全平方數

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

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

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

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-perfect-square/
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。

解法一:二分查找法

用二分查找的方法來尋找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));
    }
}

【每日寄語】 愿你忠于自己,活的認真;笑得放肆。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容