50. Pow(x, n)

解法

这个题的解法倒是挺简单的,就是将n二分,然后不断递归计算,这个地方开始想着能不能不二分,而是三分,其实也可以,不过这样就是3叉树,余数不为0的处理情况也更复杂。

这个题本来是能直接过的,但是有个坑点,就是n小于0时,如果转为-n,是会存在溢出的,要将int转为long,这是因为负数的最小值绝对值比正数大1。

class Solution {

    public double myPow(double x, int n) {

        if (n == 0) {

            return 1;

        }

        long N = n;

        return n > 0 ? quickPow(x, N) : 1 / quickPow(x, -N);

    }

    private double quickPow(double x, long n) {

        if (n == 1) {

            return x;

        }

        double d = quickPow(x, n / 2);

        return n % 2 == 0 ? d * d : d * d * x;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题干:实现pow(x, n),即计算 x 的 n 次幂函数。说明:-100.0 <x< 100.0n是 32 位有...
    老老老狼阅读 2,523评论 0 1
  • 题目描述(中等难度) 就是求幂次方。 解法一 求幂次方,用最简单的想法,就是写一个 for 循环累乘。 至于求负幂...
    windliang阅读 1,683评论 0 0
  • Pow(x, n)就是求x的n次幂,当然我们可以直接使用库函数,但是这样的话,你的面试要凉凉了。 第一种思路:暴力...
    Jason_Shu阅读 1,300评论 0 0
  • Implement pow(x, n). Hide Company TagsLinkedIn Google Blo...
    番茄晓蛋阅读 1,456评论 2 1
  • Medium这道题要先处理n为奇偶和n为正负,难在处理edge case.比如当n = Integer.MIN_V...
    greatseniorsde阅读 1,332评论 0 0