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)呢?因为它的题目是跟二分查找有关。

'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值