标签:技术 size 否则 quic solution 每日一题 位置 code pre
递归法
思路:
在计算一个数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)
标签:技术 size 否则 quic solution 每日一题 位置 code pre
原文地址:https://www.cnblogs.com/nilhxzcode/p/13024685.html