二分法/分治法:leetcode 50 Pow(x,n)
本文讲解了 Pow(x,n)
的最优算法以及背后的二分法/分治法思想,本题仍可以利用二进制位运算解决。
实现 Pow(x, n)
,即计算 \(x\) 的 \(n\) 次幂函数 \(x^n\)。
示例1:
1输入:x = 2.00000, n = 10
2输出:1024.00000
示例2:
1输入:x = 2.00000, n = -2
2输出:0.25000
3解释:2^{-2} = (1/2)^2 = 1/4 = 0.25
解法:
1package main
2
3import (
4 "fmt"
5)
6
7func myPow(x float64, n int) float64 {
8 if n >= 0 {
9 return quickMul(x, n)
10 }
11 return 1.0 / quickMul(x, -n)
12}
13
14func quickMul(x float64, n int) float64 {
15 if n == 0 {
16 return 1
17 }
18 y := quickMul(x, n/2)
19 if n%2 == 0 {
20 return y * y
21 }
22 return y * y * x
23}
24
25func main() {
26 fmt.Println(quickMul(1.5, 2)) // 打印值 2.25
27}