加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

【LeetCode每天一题】Pow(x, n)(平方)

发布时间:2020-12-14 01:50:50 所属栏目:Linux 来源:网络整理
导读: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

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:

  • -100.0 <?x?< 100.0
  • n?is a 32-bit signed integer,within the range?[?231,?231?? 1]

?

思路: 这道题并不难,主要是情况考虑周全,例如 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读