Pow(x, n)(LeetCode)

实现 pow(xn) ,即计算 x 的 n 次幂函数。

示例 1:

输入: 2.00000, 10
输出: 1024.00000

示例 2:

输入: 2.10000, 3
输出: 9.26100

示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

说明:

  • -100.0 < x < 100.0
  • n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

'''

这道题难度不大。

来个循环累乘,就能。。超时了,果然中等题没那么简单。。

然后来了个递归调用拆解相乘,然后又超。。超时了。。

问了一下大佬,但是大佬的方法提交也超时了。。

最后想把递归改写成循环,但由于太晚又太懒就上床睡觉了。

今早按错按了ctrl + enter,然后进入测试,最后居然过。。过了。。

这谁顶得住啊。。

'''

class Solution:
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        if x == 0:return 0
        if x == 1 or n == 0:return 1
        def lalala(x,n):
            if n == 1:return x
            if n % 2 == 1:
                m = lalala(x,n//2)
                return m * m * x
            else:
                m = lalala(x,n//2)
                return m * m
        if n < 0:
            r = (1/lalala(x,-n))
            return r
        else:
            r = (lalala(x,n))
            return r

'''

x为特殊值时,可以在这方面处理一下

如果用循环累乘的话,C或者C++有可能能过,但Python是不可能的

所以只能从优化它的时间复杂度入手也就是努力把它的时间复杂度从O(n)降到O(logn)

为什么是O(n)降到O(logn)呢?因为它的题目是跟二分查找有关。

'''

猜你喜欢

转载自blog.csdn.net/weixin_41169182/article/details/85421471
今日推荐