給你一個非負整數?x
?,計算并返回?x
?的?算術平方根?。
由于返回類型是整數,結果只保留?整數部分?,小數部分將被?舍去 。
注意:不允許使用
示例 1:
輸入:x = 4 輸出:2示例 2:
輸入:x = 8 輸出:2 解釋:8 的算術平方根是 2.82842..., 由于返回類型是整數,小數部分將被舍去。
0 <= x <= 231 - 1
任何內置指數函數和算符,例如?pow(x, 0.5)
?或者?x ** 0.5
易懂解:
class Solution {
public:// 函數功能:計算非負整數x的算術平方根,返回整數部分(即不超過平方根的最大整數)int mySqrt(int x) {// 使用long long類型的i,避免計算i*i時發生整數溢出long long i = 0;// 無限循環,直到找到滿足條件的i才退出while (1) {// 核心判斷條件:// 1. i的平方小于等于x(說明i可能是平方根的整數部分)// 2. (i+1)的平方大于x(說明i是最大的滿足條件的整數)if (i * i <= x && (i + 1) * (i + 1) > x) {break; // 找到目標i,退出循環}i++; // 不滿足條件時,i遞增繼續嘗試}return i; // 返回找到的i,即x的算術平方根的整數部分}
};
?官方解:
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 long)mid * mid <= x) {ans = mid;l = mid + 1;} else {r = mid - 1;}}return ans;}
};作者:力扣官方題解