leetcode 每日一题 50. Pow(x, n)
Posted nil_f
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 每日一题 50. Pow(x, n)相关的知识,希望对你有一定的参考价值。
递归法
思路:
在计算一个数x的n次幂时xn,我们可以先递归计算出x的n//2次幂y=xn//2,然后根据递归计算的结果,如果n是偶数,则结果为xn=y2,否则xn=y2*x。
例如:
X77 = (X38)2 * X = ((X19)2)2 * X = (((X9)2 *X)2)2 * X = ((((X4)2 * X)2 *X)2)2 * X = (((((X2)2)2 * X)2 *X)2)2 * X
代码:
class Solution: def myPow(self, x: float, n: int) -> float: def quickMul(N): if N == 0: return 1.0 y = quickMul(N // 2) return y * y if N % 2 == 0 else y * y * x return quickMul(n) if n >= 0 else 1.0 / quickMul(-n)
迭代法
思路:
从递归法中可以看出,在最终结果中,最初的X贡献了X64,第二个X贡献了X8,第三个贡献了X4,最后一个贡献了X1,将每个贡献值相乘即为最终结果X77。这里可以看出,64,8,4,1 分别对应77的二进制中的1的位置,即 (1001101)2 ,所以我们可以通过对77除2迭代,把每个贡献值相乘得到结果。
代码:
class Solution: def myPow(self, x: float, n: int) -> float: def quickMul(N): ans = 1.0 x_contribute = x while N > 0: if N % 2 == 1: ans *= x_contribute x_contribute *= x_contribute N //= 2 return ans return quickMul(n) if n >= 0 else 1.0 / quickMul(-n)
以上是关于leetcode 每日一题 50. Pow(x, n)的主要内容,如果未能解决你的问题,请参考以下文章