// 4 2
// 8 2
// 二分查找
pub fn my_sqrt(x: i32) -> i32 {
if x == 0 {
return 0;
}
let mut left = 1;
let mut right = x;
while left <= right {
let mid = left + (right - left) / 2;
if mid == x / mid {
return mid;
} else if mid < x / mid {
left = mid + 1;
} else {
right = mid - 1;
}
}
right
}
//牛顿迭代法
pub fn my_sqrt2(x: i32) -> i32 {
if x == 0 {
return 0;
}
let mut r = x as f64;
let eps = 1e-6; // 设置一个精度控制
while (r * r - x as f64).abs() > eps {
r = (r + x as f64 / r) / 2.0;
}
r as i32
}
fn main() {
assert_eq!(my_sqrt(4), 2);
assert_eq!(my_sqrt(8), 2);
assert_eq!(my_sqrt2(4), 2);
assert_eq!(my_sqrt2(8), 2);
}
leetcode简单题14 N.69 x的平方根 rust描述
于 2024-07-06 19:08:36 首次发布