這題基本想法應該沒什麼問題,不過要注意幾個點:
x == 0 的時候就直接 return 0
因為 mid*mid 可能會 overflow,所以要用 long
class Solution { public: int mySqrt(int x) { if(x == 0) return 0; long l = 1, mid, r = x; while(l+1 < r) { mid = l + (r-l)/2; if(mid*mid == x) return mid; else if(mid*mid > x) r = mid; else l = mid; } return l; } };
Last updated 4 years ago