Leetcode-50.Pow(x,n)
题目描述
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/powx-n
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:快速幂(递归)
借鉴:leetcode官方
假设我们已经得到了$x^n$,我们如何得 $x^{2n}$呢?很明显我们不需要再将x再乘n次,我们直接使用$(x^n)^2=x^{2n}$,通过一次计算,我们就得到了结果值
同样对于$x^n$我们可以通过求$x^{n/2}$(A)来得到$x^n$我们可以根据n的奇偶性来分别讨论$x^n$的值。如果n为偶,那么$(x^n)^2=x^{2n}$来得到$x^n$=A*A如果n为奇数那么$x^n$= A * A *x
1 | class Solution { |
解法2:快速幂(循环)
使用公式$x^{a+b}=x^a+x^b$我们可以将n看做一系列正整数之和,即n=$b_1+b_2+b_3+……+b_n$那么到底将n分成那些数的和呢,我们可以以x的10次方为例,10的二进制为1010,然后把它展成2的幂次的和。
$x^{10}=x^{(1010)_2}=x^{12^3+02^2+12^1+02^0}$即$x^{10}=x^{2^3}*x^{2^1}$
同时10的二进制数 在 3 1 位置为1 也就是说我们把1位置对应的项累乘就能得到结果,
那么累成的项,我们可以发现前一项是后一项的自乘,即$x^8=x^4*x^4$
1 | class Solution { |