zoukankan      html  css  js  c++  java
  • 【leetcode】Pow(x,n)

        马上各种校招要开始了,怎么也得准备一下,之前一直在看看机器学习,NLP方面的东西,收获很多。最近换换脑子,回过头来做做leetcode,感觉还是蛮有意思的。今天刷了个水题,AC不高,然而难度也不高。。不知道为啥。第一次提交用了最最锉的方法,找虐的,很明显超时。于是开始想,第一个想到的就是二分,本来要做n次的计算,现在只要log(n)就可以了,没啥边界,注意n是非正数的情况就可以了:

    class Solution:
        # @param {float} x
        # @param {integer} n
        # @return {float}
        def myPow(self, x, n):
            res = 1
            if n == 0:
                #return 1
            if n < 0:
                x = float(1)/x
                n = 0-n
            while(n > 0):
                if n % 2 == 1:
                    res *= x
                n = n/2
                x *= x
            return res
    

      之后还想过是不是可以弄个3次方、4次方啥的,后来给AC了也就没整了。不过想想道理也是一样的,就是考虑不能整除的情况,相对来说,2次方考虑的较少,时间也算可以。不过上面非递归的情况理解起来有点困难的话,来个递归的版本:

    class Solution:
        # @param {float} x
        # @param {integer} n
        # @return {float}
        def myPow(self, x, n):
            if n < 0:
                x = float(1)/x
                n = 0-n
    
            if n == 0:
                return 1
            v = self.myPow(x, n/2)
            if n % 2 == 0:
                return v * v
            else:
                return v * v * x
                
  • 相关阅读:
    快速幂(Fast Pow)
    半小时写完替罪羊重构点分树做动态动态点分治之紫荆花之恋的wyy贴心指导
    POJ2942 UVA1364 Knights of the Round Table 圆桌骑士
    二分图判定
    Tarjan求点双连通分量
    POJ1523 SPF 单点故障
    OI比赛常数优化
    Tarjan求割点
    NOIP2015 D1T1 神奇的幻方
    NOIP2016 D2T2 蚯蚓
  • 原文地址:https://www.cnblogs.com/KingKou/p/4684468.html
Copyright © 2011-2022 走看看