https://leetcode.com/problems/powx-n/description/
Implement pow(x, n).
比较简单的题,分而治之思想
package go.jacob.day730;
import org.junit.Test;
public class Demo3 {
@Test
public void testName() throws Exception {
System.out.println(myPow_byme(34.00515, -3));
}
public double myPow(double x, int n) {
if (x == 0)
return 0;
if (n < 0)
return 1 / power(x, -n);
else
return power(x, n);
}
private double power(double x, int n) {
if (n == 0)
return 1;
double half = power(x, n / 2);
if (n % 2 == 0)
return half * half;
else
return half * half * x;
}
/*
* 我的解法:287/300 passed .超时
*/
public double myPow_byme(double x, int n) {
if (x == 0)
return 0;
if (n == 0)
return 1;
boolean flag = false;
if (n < 0)
flag = true;
double res = solve_1(x, Math.abs(n));
return flag ? 1 / res : res;
}
private double solve_1(double x, int n) {
if (n == 0)
return 1;
double product = x;
int index = 1;
while (index + index <= n) {
product *= product;
index += index;
}
return product * solve_1(x, n - index);
}
}