题目

image.png

思路

  • 类似于查找某个值,通过二分法不断缩小范围。
  • 为了防止溢出,使用x / m < m来判断,而不是使用x = m * m判断。

代码

  1. public int mySqrt(int x) {
  2. if(x == 1) return 1;
  3. int min = 0, max = x;
  4. while(max - min > 1) {
  5. int m = (max + min) / 2;
  6. if(x / m < m)
  7. max = m;
  8. else
  9. min = m;
  10. }
  11. return min;
  12. }

x的平方根