2021-09-27:Pow(x, n)。实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x**n)。力扣50。

福大大 答案2021-09-27:

遍历n的二进制位。
时间复杂度:O(logn)。
空间复杂度:O(1)。

代码用golang编写。代码如下:

package main

import (
    "fmt"
    "math"
)

func main() {
    x := 5.3
    n := 10
    ret := myPow(x, n)
    fmt.Println(ret)
}

func pow(a int, n int) int {
    ans := 1
    t := a
    for n != 0 {
        if (n & 1) != 0 {
            ans *= t
        }
        t *= t
        n >>= 1
    }
    return ans
}

// x的n次方,n可能是负数
func myPow(x float64, n int) float64 {
    if n == 0 {
        return 1
    }
    pow := n + 1
    if n != math.MinInt64 {
        pow = n
    }
    t := x
    ans := 1.0
    for pow != 0 {
        if (pow & 1) != 0 {
            ans *= t
        }
        pow >>= 1
        t = t * t
    }
    if n == math.MinInt64 {
        ans *= x
    }
    if n < 0 {
        return 1.0 / ans
    } else {
        return ans
    }
}

执行结果如下:
图片


左神java代码