LeetCode | Pow(x, n)

2014-11-24 11:21:40 · 作者: · 浏览: 0

题目

Implement pow(x, n).

分析

分治法(解法1)和一种比较巧的方法(解法2)

解法1

public class Pow {
	public double pow(double x, int n) {
		if (n == 0) {
			return 1;
		} else if (n > 0) {
			if (n == 1) {
				return x;
			}
			double halfReuslt = pow(x, n >> 1);
			double result = halfReuslt * halfReuslt * pow(x, n & 0x1);
			return result;
		} else {
			if (n == Integer.MIN_VALUE) {
				return 1 / (pow(x, Integer.MAX_VALUE) * x);
			}
			return 1 / pow(x, -n);
		}
	}
}
解法2

public class Pow {
	public double pow(double x, int n) {
		if (n == 0) {
			return 1.;
		} else if (n > 0) {
			double result = 1.;
			for (; n > 0; n >>= 1) {
				if ((n & 1) > 0) {
					result *= x;
				}
				x *= x;
			}
			return result;
		} else {
			if (n == Integer.MIN_VALUE) {
				return 1. / (pow(x, Integer.MAX_VALUE) * x);
			}
			return 1. / pow(x, -n);
		}
	}
}