leetcode:50.Pow(x, n)

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

题目描述:


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


示例1:


输入: 2.00000, 10
输出: 1024.00000


示例2:


输入: 2.10000, 3
输出: 9.26100


示例3:


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


说明:


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


题目难度:中等


分析:


如果直接调用API的话:return Math.pow(x, n)即可。


计算 x的 n次幂函数也就是计算 n个 x相乘。但是如果直接用for循环计算的话,当 n特别大的时候就会超出时间限制,显然不能这么去计算。但是可以用分治算法的思想把时间复杂度从 O(n) 缩短到 O(log 2 n) 。简单点来说就是两两相乘,把 n个x分成两部分,比如n为8时,前4后4,那么就变成了x 4 * x 4 ,此时只需要计算一个x 4  的结果然后再和自身相乘即可,同理x 4 也可以拆分成x 2* x 2 ,以此类推,即可大大缩短用时。这里其实有点类似折半查找。


代码如下:


class Solution {
    public double myPow(double x, int n) {
      // 判断n是正是负
        int pow = n > 0 ? 1 : -1;
        // 最终结果,定义成1在相乘时不影响结果
        double res = 1;
        // 循环相乘即可,这里利用n的奇偶性来判断
        while (n != 0) {
            if (n % 2 != 0) {
                res *= x;
            }
            x *= x;
            n /= 2;
        }
        // 如果n是负数,这里要把前面的结果取倒数
        if (pow == -1) {
            return 1 / res;
        }
        return res;
    }
}


总结:


时间复杂度为O ( l o g 2 n ) ,利用了分治的思想可以缩短用时。

目录
相关文章
|
4天前
|
算法 Java
LeetCode第50题Pow(x, n)
LeetCode第50题"Pow(x, n)"的解题方法,运用分而治之的策略,通过快速幂算法高效计算幂函数的结果。
LeetCode第50题Pow(x, n)
|
13天前
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
11 1
|
9月前
|
Java
Leetcode 372. Super Pow
真正的解法其实思路很简单,我随便举个例子就很容易理解了,假设要求(123^4567)%1337,只需要把这个幂式子分解成几个层次,然后把球模加到每一层中间就很容易计算出来了。
29 0
|
算法 安全 Swift
LeetCode - #50 Pow(x, n)
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode 372. Super Pow
你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
62 0
LeetCode 372. Super Pow
LeetCode 50. Pow(x, n)
实现pow(x,n),即计算x的n次方
77 0
LeetCode 50. Pow(x, n)
|
存储 机器学习/深度学习 算法
LeetCode 49字母异位词分组&50pow(x,n)&51八皇后
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
116 0
LeetCode 49字母异位词分组&50pow(x,n)&51八皇后
|
算法 Java Python
ACM 选手图解 LeetCode Pow(x,n)
ACM 选手图解 LeetCode Pow(x,n)
ACM 选手图解 LeetCode Pow(x,n)
|
算法 Java C++
LeetCode(算法)- 50. Pow(x, n)
LeetCode(算法)- 50. Pow(x, n)
151 0
LeetCode(算法)- 50. Pow(x, n)