LeetCode 50. Pow(x, n)

简介: 实现pow(x,n),即计算x的n次方

v2-cdc633b56578481fda77127c88f9ecfa_1440w.jpg


Description



Implement pow(x, n), which calculates x raised to the power n (xn).

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]


描述



实现pow(x,n),即计算x的n次方


思路



  • 拿到这道题第一个想到的是循环,但是循环显然不是这道题考察的重点,而且,在此题中,采用循环(或者递归)会超时
  • 此题主要考察二分法
  • 我们计算xn时(以计算28说明),如果采用循环需要进行乘法运算约8(O(n))次,但是如果使用二分法,计算2*2得到4,计算4*4得到16,计算16*16得到245,只需要3(log2(8))次
  • 即28=(((22)2)2)
  • pow(x,n)中,我们每次让x自乘一次,n就可以减半,这里要注意奇数的情况,如果n是奇数,需要在结果中自乘一下当前的x,不然会少一次x


class Solution:
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        # 如果n等于0,则不论x为何值,返回1
        if n == 0:
            return 1
        # 如果n为负数,则转换为(1/x)^(-n)的形式
        if n < 0:
            x = 1/x
            n = -n
        # 初始化res为1
        res = 1
        while n > 1:
            # 如果n为奇数,res则需要乘以x一次
            if n % 2:
                res *= x
            # x自乘一次
            x *= x
            # n整除2
            n //= 2
        return res*x
目录
相关文章
|
6月前
|
Java
Leetcode 372. Super Pow
真正的解法其实思路很简单,我随便举个例子就很容易理解了,假设要求(123^4567)%1337,只需要把这个幂式子分解成几个层次,然后把球模加到每一层中间就很容易计算出来了。
25 0
|
11月前
|
算法 安全 Swift
LeetCode - #50 Pow(x, n)
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode 372. Super Pow
你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
49 0
LeetCode 372. Super Pow
|
存储 机器学习/深度学习 算法
LeetCode 49字母异位词分组&50pow(x,n)&51八皇后
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
98 0
LeetCode 49字母异位词分组&50pow(x,n)&51八皇后
|
算法 Java C++
LeetCode(算法)- 50. Pow(x, n)
LeetCode(算法)- 50. Pow(x, n)
141 0
LeetCode(算法)- 50. Pow(x, n)
|
算法 Java Python
ACM 选手图解 LeetCode Pow(x,n)
ACM 选手图解 LeetCode Pow(x,n)
ACM 选手图解 LeetCode Pow(x,n)
|
算法 Serverless

热门文章

最新文章