题目
- Pow(x, n)
题目描述
实现Pow(x,n)即计算x的n次幂函数(即,x^n)。
案例
示例一
输入: x = 2.00000, n = 10
输出: 1024.00000
示例二
输入: x = 2.10000, n = 3
输出: 9.26100
示例三
输入: x = 2.00000, n = -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
思路
- 根据n次幂决定倍数
- 当n是2的倍数是则对基数进行翻倍处理
注意事项
- n是否大于0
- n是奇数还是偶数
代码
func myPow(x float64, n int) float64 {
if n >= 0 {
return quickMul(x, n)
}
return 1.0 / quickMul(x, -n)
}
// 快速幂——迭代
// 时间复杂度:O(\log n)O(logn),即为对 nn 进行二进制拆分的时间复杂度。
// 空间复杂度:O(1)O(1)。
func quickMul(x float64, n int) float64 {
rs := 1.0
// 初始值为x
data := x
// 0000
// 8421
// 0101
// 在对n进行除二
for n > 0 {
// 判断n是否能整除2
// n为奇数时首次和最后一次满足条件
// n为偶数时最后一次满足条件
if n%2 == 1 {
rs *= data
}
// 将基数不断平方
data *= data
// 每次满足条件后对n减少2倍
n /= 2
}
return rs
}
参考
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/po…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。