算法—leetcode—50. Pow(x, n)

375 阅读1分钟

题目

  1. 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

思路

  1. 根据n次幂决定倍数
  2. 当n是2的倍数是则对基数进行翻倍处理

注意事项

  1. n是否大于0
  2. 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…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。