原文首发自heliuphy的博客
题目描述
实现 pow(x, n)
。 (n是一个整数)
题目分析
通过 n 次循环的时间复杂度为 O ( n ) O(n) O(n) ,而利用二分法可以做到更优。只不过需要注意 n 为负数时的处理。
本来想到的是先定义一个函数 positivePow(),用来解决正数乘方的问题,负数的情况只需要取一个倒数就可以了。但是这样无法解决 Integer.MIN_VALUE
的
乘方的问题,因为 Integer.MIN_VALUE
取负号之后,将会造成 int 的越界。代码如下:(测试代码记为上述情况,此时会造成死循环)。
public class MyPow {
public double myPow(double x, int n) {
if (n < 0) {
return 1 / positivePow