69. x 的平方根 - 力扣(LeetCode)
方法一:暴力
從0開始遍歷,直到 ans*ans > x 為止,這時ans-1就是答案。需要注意可能會爆int,所以ans要開為long,最后再轉換為int。
class Solution {public int mySqrt(int x) {long ans = 0;while(ans * ans <= x){ans++;}return (int)ans-1;}
}
方法二:二分
這道題很適合用二分來做,甚至題解就是標準的二分模板。
如果開方為整數,會從return mid語句返回。因為非整數是向下取整,所以結果返回l-1。
class Solution {public int mySqrt(int x) {long l = 0, r = x;while(l <= r) {long mid = l + (r - l) / 2;if(mid * mid == x) {return (int)mid;}if(mid * mid < x) {l = mid + 1;} else {r = mid - 1;}}return (int)(l - 1);}
}
當然這里也可以像官方題解一樣,直接合并小于和等于,額外賦值ans=mid,無論開方是否為整數,最后都返回ans即可。
class Solution {public int mySqrt(int x) {int l = 0, r = x, ans = -1;while (l <= r) {int mid = l + (r - l) / 2;if ((long) mid * mid <= x) {ans = mid;l = mid + 1;} else {r = mid - 1;}}return ans;}
}作者:力扣官方題解
鏈接:https://leetcode.cn/problems/sqrtx/solutions/238553/x-de-ping-fang-gen-by-leetcode-solution/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。