Leetcode OJ: Pow(x, n)

实现Pow(x, n)

累乘当然可以,但效率太低了。网上搜的很多用的都是分治的思想,递归实现,感觉有点复杂。

分析下吧

n = n1 * 2^0 + n2 * 2^1 + n3 * 2^2 + ...

x^n = x^(n1 * 2^0 + n2 * 2^1 + n3 * 2^2 + ...) = (x^(2^0))^n0 * (x^(2^1))^n1 * ...

也许这么看着很复杂,其实就是把n分解成二进制数就很清晰了,为1的位才相乘,为0的跳过,另外还要处理次幂为负的情况,看了代码就清晰~

 1 class Solution {
 2 public:
 3     double pow(double x, int n) {
 4         double ret = 1;
 5         if (n < 0) {
 6             x = 1/x;
 7             n = -n;
 8         }
 9         while (n > 0) {
10             if (n & 1)
11                 ret *= x;
12             x = x * x;
13             n >>= 1;
14         }
15         return ret;
16     }
17 };

 

 

 

posted @ 2014-04-06 00:18  flowerkzj  阅读(122)  评论(0编辑  收藏  举报