1 public class Solution { 2 public double myPow(double x, int n) { 3 if (n == 0) { 4 return 1.0; 5 } 6 double y = myPow(x, n / 2); 7 if (n % 2 == 0) { 8 return y * y; 9 } else { 10 if (n > 0) { 11 return y * y * x; 12 } else { 13 return y * y / x; 14 } 15 } 16 } 17 }
LinkedIn, eBay电面原题
看似简单的分治却不容易写好
尝试过当n为负数时返回 1 / myPow(x, -n) 这种做法在n = Integer.MIN_VALUE时会溢出,需要添加特殊处理,代码不够简洁
以上做法是目前看到过最简洁的,时间复杂度为O(logN)
原文:http://www.cnblogs.com/ilovenaomi/p/4884143.html