zoukankan      html  css  js  c++  java
  • [LeetCode] 69. Sqrt(x) 求平方根

    Implement int sqrt(int x).

    Compute and return the square root of x.

    求一个数的平方根。

    解法:二分法,迭代循环在x范围内找中间值mid,然后判断mid * mid和x,如果mid  > x/mid(不要写成middle*middle==x,会溢出),说明这个数大了,就保留左边,right = mid -1。否则保留右边, left = mid + 1。直到left > right结束循环,返回left - 1。因为当x>2时,x/2的平方一定大于x,不可能是平方根,右指针可以从x/2开始。

    Java:

    public class Solution {    
        public int sqrt(int x) {    
            if(x<=1) {    
                return x;    
            }    
                
            int begin = 1;    
            int end = x;    
            int middle = 0;    
            while(begin<=end) {    
                mid = begin + (end - begin)/2;     
                if(middle == x/mid) {    
                    return mid;    
                } else {    
                    if (middle < x/mid) {    
                        begin = mid + 1;    
                    } else {    
                        end = mid - 1;    
                    }    
                }    
                    
            }       
            return end;    
        }    
    }  

    Python:

    class Solution(object):
        def mySqrt(self, x):
            """
            :type x: int
            :rtype: int
            """
            if x < 2:
                return x
            
            left, right = 1, x // 2
            while left <= right:
                mid = left + (right - left) // 2
                if mid > x / mid:
                    right = mid - 1
                else:
                    left = mid + 1
    
            return left - 1
    

    C++:

    class Solution {
    public:
        int mySqrt(int x) {
            if (x <= 1) return x;
            int left = 0, right = x;
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (x / mid >= mid) left = mid + 1;
                else right = mid;
            }
            return right - 1;
        }
    };
    

     

    类似题目:

    [LeetCode] 50. Pow(x, n) 求x的n次方 

    All LeetCode Questions List 题目汇总

      

  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/lightwindy/p/8587065.html
Copyright © 2011-2022 走看看