Java&LeetCode 初入門——069. x 的平方根
阿新 • • 發佈:2019-01-14
Java&LeetCode 初入門——069. x 的平方根
文內程式碼全部採用JAVA語言。
題目
實現 int sqrt(int x) 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
測試用例
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842...,
由於返回型別是整數,小數部分將被捨去。
個人解法
數學上的手動求解平方根用的是二分法。二分法比較簡單,直接上程式碼。範圍從左右兩邊往中間收縮。左邊起始i=0,右邊起始位j=x,每次檢查中間值(i+j)/2的平方,和x進行比較。1實在是放不進去,就單獨處理了。
執行用時: 25 ms, 在Sqrt(x)的Java提交中擊敗了86.16% 的使用者。尚可。
注意為了防止從溢位,中間值的平方應該設為long形,反正用int百分百要溢位。
class Solution {
public int mySqrt(int x) {
int i=0;
int j=x;
if (x==1) {
return 1;
}
while (i+1<j) {
long temp=(i+j)/2;
if (x<(temp*temp)) {
j=(int)temp;
}else if (x>=temp*temp) {
i=(int)temp;
}
}
return i;
}
}
也有簡單粗暴的求法,就是從0開始遍歷,滿足目標x就輸出,不過速度就慢多了。大概要81 ms。
class Solution {
public int mySqrt(int x) {
int ans = 0;
for (long i = 0; i <= x; i++) {
if (i*i<=x && (i+1)*(i+1)>x) {
ans=(int)i;
break;
}
}
return ans;
}
}
評論區解法
評論區很多就直接呼叫math.sqrt();雖然很快但是不符合題目的要求。
二分法應該是最優解法了,至於如何把程式碼寫的又簡潔,執行速度又快,就需要進一步學習了。