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
                
  • 相关阅读:
    C++异常:exception
    C++关键字:explicit
    C++关键字:重学记录
    Unity jointmoto
    hashtable和hashmap
    Spring MVC 笔记 概述
    SQL上门2
    面试:A
    Java 初学者
    SQL上门
  • 原文地址:https://www.cnblogs.com/KingKou/p/4684468.html
Copyright © 2011-2022 走看看