LeetCode之69. x 的平方根

概要

題目來源鏈接:https://leetcode-cn.com/problems/sqrtx/

難度:簡單

類型:每日一題

題目

實現 int sqrt(int x) 函數。

計算並返回 x 的平方根,其中 x 是非負整數。

由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。

示例

示例 1:

輸入: 4
輸出: 2
示例 2:

輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842..., 
     由於返回類型是整數,小數部分將被捨去。

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

分析

第一種思路,暴力破解。

第二種思路,是看題解想出來的思路,但是最後處理2147395599這個數的時候超時了,自己的編譯器會得出結果,但是提交給LeetCode會超時,其實還是暴力破解。

第三種思路就是官方題解,也就是二分法。

代碼

第一種思路

    /**
     * 求x的平方根(第一種算法:暴力破解)
     * @param x
     * @return
     */
    public int mySqrt(int x) {
        int k = 1;
        while (x / k >= k) {
            k++;
        }
        return k - 1;
    }

第二種思路

    /**
     * 求x的平方根
     * @param x
     * @return
     */
    public long mySqrt(int x){
        if(x==0){
            return (int)x;
        }
        if(x==1){
            return (int)x;
        }
        long low=0;
        long high=x;
        long mid=-1;
        while (low<high){
            mid=(high-low)/2;
            if(mid*mid<=x){
                return (int)mid;
            }else if(mid*mid>x){
                high-=1;
            }
        }
        return (int)mid;
    }

第三種思路

    public int mySqrt(int x){
        int low = 0, high = x, ans = -1;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            if ((long)mid * mid <= x) {
                ans = mid;
                low = mid + 1;
            }
            else {
                high = mid - 1;
            }
        }
        return ans;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章