LeetCode 50. Pow(x, n)

来源:互联网 发布:自学编程 编辑:程序博客网 时间:2024/06/03 19:43

50. Pow(x, n)

Implement pow(x, n).

题目意思:
题目意思很简单,让我们实现一个幂函数,也就是给出xn,返回xn.

解题思路:
幂函数是什么我们都很清楚,xn表示n个x相乘的结果,最简单粗暴的方法就是写一个循环来将n个x乘起来,但这是低效的,而且这种方法在Leetcode上提交也不会通过。但是,对于n个x,如果我们把这些x分成两部分。

xxxpart1:n2xxxxpart2:n2x

从上面的式子可以看出,实际上,我们只需要计算一次第一部分的n个x的乘积,后半部分就不用算了,也就是
xn=(xn2)2

按照这中方法,我们可以递归地一直把这些x划分成2部分,每一部分又划分成2部分……直到只剩下1个或0个x,这样就可以开始返回。

代码:

class Solution {public:    double myPow(double x, int n) {        if (n < 0) {            x = 1 / x;            n = -n;        }        if (n == 0) return 1;        else if (n == 1) return x;        double half = myPow(x, n / 2);        double result;        if (n % 2 == 0) result = half * half;        else result = half * half * x;        // 判断result是否inf,如果是就返回0,否则返回result的值        return result + 1 == result - 1 ? 0 : result;    }};
原创粉丝点击