【LeetCode每天一题】Pow(x, n)(平方)
Implement?pow(x,?n),which calculates?x?raised to the power?n?(x,n). Example 1:? ? ? ? ? ? ? ? ?Input: 2.00000,10? ? ? ? ? ? ? ? ?Output: 1024.00000 Example 2:? ? ? ? ? ? ? ? ?Input: 2.10000,? 3? ? ? ? ? ? ? ? ??Output: 9.26100 Example 3:? ? ? ? ? ? ? ? ?Input: 2.00000,-2? ? ? ? ? ? ? ? ?Output: 0.25000? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Explanation: 2-2 = 1/22 = 1/4 = 0.25 Note:
? 思路: 这道题并不难,主要是情况考虑周全,例如 n为负数, x为0,1时等等问题。 使用最简单的方法就是逐个累乘, 但是这种方法会在 n值非常大时,运行时间太长,导致超时。并且效率低。 ? ?另外一种使用 这样一种公式来解决: an= an/2 + an/2 (当n为偶数时),?an= (an/2?+ an/2)a (当n为奇数时),这样计算效率提升。 时间复杂度为O(logn),空间复杂度为O(1)。
1 class Solution(object): 2 def myPow(self,x,n): 3 """ 4 :type x: float
5 :type n: int
6 :rtype: float
7 """ 8 if x == 1.0 or x == 0.0: # 特殊情况的判断 9 return x if x == 1.0 else 0.0
10 neg_flag = False # 指数为负数的标志位 11 if n < 0: 12 neg_flag = True 13 n = abs(n) # 将负指数替换为正整数 14 res = 1
15 while n: 16 if n&1: # 对于指数奇偶数的判断。 17 res *= x 18 x *= x # x = x * x 19 n = n >> 1 # 指数除以2
20 if neg_flag: 21 return 1/res 22 return res
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |