50. Pow(x, n)

Implement pow(x, n).

Solution1:递归实现

思路: 2^7 = (half=2^3) ^2 * 2,分成相同的两半23,只计算其中一半即可,而不用2来乘七次,继续对23递归相同操作
实现用递归
Time Complexity: O(logN) Space Complexity: O(logN) 递归缓存

Solution2:Iterative实现

思路: x ^ 5, 5=101, 低到高第一位是1, result *= x, 第二位是0, nothing for x^2,第三位是1,result *= x^4,而x ^ n是累积乘自身得出的 x^4 = (x^2) ^ 2
实现用递归
Time Complexity: O(logN) Space Complexity: O(1)

Solution1 Code:

class Solution1a {
    // 2^7 = (half=2^3)^2 * 2
    // 2^6 = (half=2^3)^2
    public double myPow(double x, int n) {
        if(n < 0) {
            n = -n;
            x = 1 / x;
        }
        return helper(x, n);
    }
    private double helper(double x, int n) {
        if(n == 0) return 1;
        double half = helper(x, n / 2);
        if(n % 2 == 0)
            return half * half;
        else 
            return x * half * half;
          
    }
}
public class Solution1b{
    public double pow(double x, int n) {
        if(n == 0)
            return 1;
        if(n<0){
            n = -n;
            x = 1/x;
        }
        return (n%2 == 0) ? pow(x*x, n/2) : x*pow(x*x, n/2);
    }
}

Solution2 Code:

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

推荐阅读更多精彩内容

  • Implement pow(x, n). 一刷题解:使用二分法求实数幂。注意,需要考虑n为负数的情况Time Co...
    Jeanz阅读 154评论 0 0
  • Implement pow(x, n). 123^10 = (1232)5123^5 = 123*(1232)2t...
    Zihowe阅读 79评论 0 0
  • 题目描述 Implement pow(x, n).实现x的n次方计算 问题分析 暴力求解 考虑极端输入:2.1 结...
    一里山阅读 337评论 0 0
  • 问题 Implement pow(x, n). 例子 pow(8, 8)16777216 分析 二分法快速幂 要点...
    RobotBerry阅读 442评论 0 0
  • Implement pow(x, n). Hide Company TagsLinkedIn Google Blo...
    番茄晓蛋阅读 211评论 2 1