【LeeCode】69. x 的平方根
原创
©著作权归作者所有:来自51CTO博客作者51玖拾柒的原创作品,请联系作者获取转载授权,否则将追究法律责任
【题目描述】
给你一个非负整数 x
,计算并返回 x
的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5)
或者 x ** 0.5
。
https://leetcode.cn/problems/sqrtx/
【示例】
【代码】admin
package com.company;
// 2023-03-06
import java.util.*;
class Solution {
public int mySqrt(int x) {
double sqrt = Math.sqrt(x);
int res = (int)Math.floor(sqrt);
return res;
}
}
public class Test {
public static void main(String[] args) {
new Solution().mySqrt(4); // 输出: 2
new Solution().mySqrt(8); // 输出: 2
}
}
【代码】admin
package com.company;
// 2023-03-06
import java.util.*;
class Solution {
public int mySqrt(int x) {
long res = -1;
// 防止数值相乘后越界
for (int i = 0; (long) i * i <= x; i++){
res = i;
}
System.out.println(res);
return (int)res;
}
}
public class Test {
public static void main(String[] args) {
new Solution().mySqrt(2147395600); // 输出: 46340
new Solution().mySqrt(2); // 输出: 2
new Solution().mySqrt(8); // 输出: 2
}
}
package com.company;
// 2023-03-06
import java.util.*;
class Solution {
public int mySqrt(int x) {
int res = -1;
int left = 0;
int right = x;
while (left <= right){
int mid = (left + right) / 2;
// 需要转换为long,否则数值超过int的边界值,导致超时
if ((long) mid * mid <= x){
res = mid;
left = mid + 1;
}else{
right = mid - 1;
}
}
return res;
}
}
public class Test {
public static void main(String[] args) {
new Solution().mySqrt(4); // 输出: 2
new Solution().mySqrt(8); // 输出: 2
}
}