50. Pow(x, n)

问题

Implement pow(x, n).

例子

pow(8, 8)
16777216

分析

二分法快速幂

要点

  • 二分法;
  • 注意abs()函数有溢出的风险。例如-2147483648的绝对值为2147483648,实际上已经超出了int的表示范围。最好abs((long long)n).

时间复杂度

O(logn)

空间复杂度

O(logn)

代码

class Solution {
public:
    double myPow(double x, int n) {
        if (n == 0) return 1;
        if (n < 0) return 1.0 / myPowImpl(x, -(long long)n);
        else return myPowImpl(x, n);
    }
    
private:
    double myPowImpl(double x, long long n) {
        if (n <= 1) return x;
        double half = myPowImpl(x, n / 2);
        if (n & 1) return half * half * x;
        else return half * half;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • LeetCode 50 Pow(x, n) Implement pow(x, n). 遇到math类的题,比如po...
    ShuiLocked阅读 6,054评论 1 2
  • Implement pow(x, n). 解题思路 首先给大家介绍一下快速幂算法 以mn为例,可以先将n转换为二进...
    Shiyi001阅读 1,755评论 0 0
  • Implement pow(x, n). 一刷题解:使用二分法求实数幂。注意,需要考虑n为负数的情况Time Co...
    Jeanz阅读 1,046评论 0 0
  • Implement pow(x, n). Solution1:递归实现 思路: 2^7 = (half=2^3) ...
    matrxyz阅读 1,410评论 0 0
  • 一般来说慢跑与长跑不会让小腿变粗的,因为肌肉的生长完全依赖你给它带来的刺激种类,只有爆发力的训练和负重训练才会让肌...
    南曳阅读 5,160评论 1 4