LeetcodeMedium- [Pregunta de la entrevista 16. Potencia entera de valores numéricos]

Implemente la función double Power (base doble, exponente int), encuentre la potencia exponente de la base. No use las funciones de la biblioteca, y no necesita considerar grandes números.

Ejemplo 1:

Entrada: 2.00000, 10
Salida: 1024.00000


Ejemplo 2

Entrada: 2.10000, 3
Salida: 9.26100


Ejemplo 3

Entrada: 2.00000, -2
Salida: 0.25000
Explicación: 2-2 = 1/22 = 1/4 = 0.25
 

Explicación

-100.0 <x <100.0
n es un entero con signo de 32 bits con un rango de valores de [−2 ^ 31, 2 ^ 31 - 1].

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof Los
derechos de autor pertenecen a la red de deducción. Comuníquese con la autorización oficial para la reimpresión comercial e indique la fuente de la reimpresión no comercial.

Idea 1: potencia rápida

Convierta el exponente a binario para el análisis. Solo se requiere 1 para el cálculo.

La primera forma de escribir:

class Solution:
    def myPow(self, x: float, n: int) -> float:
        f = 1
        if n < 0:
            n = -n
            f = 0
        base = x
        ans = 1
        while n:
            if n & 1:
                ans *= base
            base *= base
            n //= 2
        if f == 0:
            ans = 1/ans
        return ans 

La segunda forma de escribir:

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if x == 0:
            return 0
        if n < 0:
            x, n = 1/x, -n
        ans = 1
        while n:
            if n & 1:
               ans *= x
            x *= x
            n >>= 1
        return ans 
 

 

Publicado 314 artículos originales · 22 alabanzas · Más de 20,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_39451578/article/details/105484413
Recomendado
Clasificación