0050-Pow(x, n)

原题:Pow(x, n)

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

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:

输入:x = 2.10000, n = 3
输出:9.26100

示例 3:

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

提示:

  • -100.0 < x < 100.0
  • -2^31 <= n <= 2^31-1
  • -10^4 <= x^n <= 10^4

思路

方法一:递归,分治思想

如果n是偶数,如图

image-20211106183812809

当n是奇数的时候,只需要在合并的时候再多乘一个x即可

class Solution {
    public double myPow(double x, int n) {
        long N = n;
        return n >= 0 ? helper(x, N) : 1.0 / helper(x, -N);
    }

    public double helper(double x, long N) {
        if (N == 0) return 1.0;
        double sub = helper(x, N / 2);
        return N % 2 == 0 ? sub * sub : sub * sub * x;
    }
}

方法二:迭代

如图,n=85可以分解成二进制,所以xn = x64 * x16 * x4 * x1 = x 64 + 16 + 4 + 1 = x85

所以,只需要统计n的二进制位为1的即可

image-20211106191317826
class Solution {
    public double myPow(double x, int n) {
        long N = n;
        return n >= 0 ? helper(x, N) : 1.0 / helper(x, -N);
    }

    public double helper(double x, long N) {
       double res = 1.0;
       while (N > 0) {
           if ((N & 1) == 1) {
               //统计二进制位为1的
               res *= x;
           }
           x *= x;
           N >>= 1;
       }
       return res;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容