LeetCode:Sqrt(x) - 整數開方

一、題目名稱java

Sqrt(x)(整數開方)函數

二、題目地址code

https://leetcode.com/problems/sqrtxip

三、題目內容leetcode

英文:Implement int sqrt(int x). Compute and return the square root of x.開發

中文:實現函數,實現整數x的開平方運算get

四、解題方法1數學

作這個題目,最簡單的方法莫過於使用語言自帶數學函數庫中的sqrt函數式,例以下面的Java代碼:io

/**
 * 功能說明:LeetCode 69 - Sqrt(x)
 * 開發人員:Tsybius2014
 * 開發時間:2015年8月12日
 */
public class Solution {

    /**
     * 開平方根 
     * @param x 被開方數
     * @return 算術平方根
     */
    public int mySqrt(int x) {
        return (int)Math.sqrt((double)x);
    }
}

五、解題方法2class

上面的方法較爲簡短,但也存在一個缺點:由於是整數開方,向下取整,所以不須要浮點數那麼高的精度,就能夠計算出正確的整型結果返回了。所以能夠嘗試使用牛頓法進行開方,而且while語句內並不像通常計算浮點數開方那樣保證偏差精確到1E-9如下,而是設置爲任意比1小的數字就能夠了。

牛頓法開平方公式以下:

具體內容可參看維基百科頁面:【平方根】條目下的【牛頓法】章節

https://zh.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E6%A0%B9#.E7.89.9B.E9.A0.93.E6.B3.95

對於這個題目而言,下面這段Java代碼執行時間更短:

/**
 * 功能說明:LeetCode 69 - Sqrt(x)
 * 開發人員:Tsybius2014
 * 開發時間:2015年8月12日
 */
public class Solution {

    /**
     * 開平方根 
     * @param x 被開方數
     * @return 算術平方根
     */
    public int mySqrt(int x) {
        if (x <= 0) {
            return 0;
        }
        double result = 1.0;
        while (Math.abs(result * result - x) > 0.9) {
            result = (result + x / result) / 2.0;
        }
        return (int)result;
    }
}

END

相關文章
相關標籤/搜索