pythonブラシleetcodeテーマ(43)

2793 ワード

50. Pow(x, n)
pow(x,n)を実現し,すなわちxのn次べき乗関数を計算する.
例1:
  : 2.00000, 10
  : 1024.00000

例2:
  : 2.10000, 3
  : 9.26100

例3:
  : 2.00000, -2
  : 0.25000
  : 2-2 = 1/22 = 1/4 = 0.25

説明:
  • -100.0 x < 100.0
  • nは32ビット符号付き整数であり、その数値範囲は[−231,231−1]である.

  • コード:
    class Solution:
        def myPow(self, x, n):
            """
            :type x: float
            :type n: int
            :rtype: float
            """
            #### the first method , pycharm    ,   leetcode      
    #         temp = 1
    #         if n == 0:
    #             return temp
    #         elif n < 0:
    #             temp = 1 / (x **(abs(n)))     ### out od range 
    #         else:
    #             temp = x **n
    #         return temp
            #### the second method
    #         if n == 0:
    #             return 1
    #         if n < 0:
    #             return 1.0 / self.myPow(x, -n)
    #         if n % 2 == 1:
    #             return x * self.myPow(x * x, n //2)
    #         else:
    #             return self.myPow(x * x, n // 2)
            
            #### the third method
            return x ** n
                
    

    69.xの平方根int sqrt(int x)関数を実装します.
    xの平方根を計算して返します.ここで、xは非負の整数です.
    戻りタイプが整数であるため、結果として整数の部分のみが保持され、小数の部分は切り捨てられます.
    例1:
      : 4
      : 2
    

    例2:
      : 8
      : 2
      : 8       2.82842..., 
                  ,        。

    コード:
    class Solution:
        def mySqrt(self, x):
            """
            :type x: int
            :rtype: int
            """
            #### the first method 
            # return int(x ** 0.5)
            
            #### the second method 
            if x < 0:
                raise ValueError("math domain error")
            if x <= 1:
                return x
            left = 0
            right = x // 2
            while left <= right:
                mid = (left + right) >> 1
                if mid ** 2 > x:
                    right = mid - 1
                elif mid ** 2 < x:
                    left = mid + 1
                else:
                    return mid 
            return  left -1