LeetCode69.x็š„ๅนณๆ–นๆ น.๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ็ฎ€ๅ•

้—ฎ้ข˜ๆ่ฟฐ

ๅŽŸ้ข˜้“พๆŽฅ๏ผš69. x ็š„ๅนณๆ–นๆ น

็ป™ไฝ ไธ€ไธช้ž่ดŸๆ•ดๆ•ฐ x ๏ผŒ่ฎก็ฎ—ๅนถ่ฟ”ๅ›ž x ็š„็ฎ—ๆœฏๅนณๆ–นๆ นใ€‚

็”ฑไบŽ่ฟ”ๅ›ž็ฑปๅž‹ๆ˜ฏๆ•ดๆ•ฐ๏ผŒ็ป“ๆžœๅชไฟ็•™ๆ•ดๆ•ฐ้ƒจๅˆ†๏ผŒๅฐๆ•ฐ้ƒจๅˆ†ๅฐ†่ขซ่ˆๅŽปใ€‚

ๆณจๆ„๏ผšไธๅ…่ฎธไฝฟ็”จไปปไฝ•ๅ†…็ฝฎๆŒ‡ๆ•ฐๅ‡ฝๆ•ฐๅ’Œ็ฎ—็ฌฆ๏ผŒไพ‹ๅฆ‚ pow(x, 0.5) ๆˆ–่€… x ** 0.5 ใ€‚

็คบไพ‹ 1๏ผš

่พ“ๅ…ฅ๏ผšx = 4
่พ“ๅ‡บ๏ผš2

็คบไพ‹ 2๏ผš

่พ“ๅ…ฅ๏ผšx = 8
่พ“ๅ‡บ๏ผš2
่งฃ้‡Š๏ผš8 ็š„็ฎ—ๆœฏๅนณๆ–นๆ นๆ˜ฏ 2.82842..., ็”ฑไบŽ่ฟ”ๅ›ž็ฑปๅž‹ๆ˜ฏๆ•ดๆ•ฐ๏ผŒๅฐๆ•ฐ้ƒจๅˆ†ๅฐ†่ขซ่ˆๅŽปใ€‚

้™ๅˆถ๏ผš

  • 0 <= x <= 231 - 1

ไปฃ็ 

Java

    public int mySqrt(int x) {
        int l = 0;
        int r = x;
        while(l <= r){
            if(r - l <= 1){
                return r * r > x ? l : r;
            }
            int mid = l + ( r - l) /2;
            if((long)mid*mid > x){
                r = mid - 1;
            } else if((long)mid*mid == x){
                return mid;
            } else {
                l = mid;
            }
        }

        return -1;
    }

Python

class Solution:
    def mySqrt(self, x: int) -> int:
        l = 0
        r = x
        while l <= r:
            if r - l <= 1:
                return l if r * r > x else r
            mid = l + (r - l) // 2
            if mid * mid > x:
                r = mid - 1
            elif mid * mid == x:
                return mid
            else:
                l = mid
        return -1

C++

class Solution {
public:
    int mySqrt(int x) {
        int l = 0;
        int r = x;
        while (l <= r) {
            if (r - l <= 1) {
                return r * r > x ? l : r;
            }
            int mid = l + (r - l) / 2;
            if ((long long)mid * mid > x) {
                r = mid - 1;
            } else if ((long long)mid * mid == x) {
                return mid;
            } else {
                l = mid;
            }
        }
        return -1;
    }
};

Go

func mySqrt(x int) int {
    l := 0
    r := x
    for l <= r {
        if r-l <= 1 {
            if r*r > x {
                return l
            } else {
                return r
            }
        }
        mid := l + (r-l)/2
        if mid*mid > x {
            r = mid - 1
        } else if mid*mid == x {
            return mid
        } else {
            l = mid
        }
    }
    return -1
}

ๅ‘่กจ่ฏ„่ฎบ

ๅŽๆ‰่ƒฝ่ฏ„่ฎบ