题目
Implement pow(x, n).
解答
直接用递归法:
//递归法("折半"递归,不要用常规的一个个乘,效率很低) public class Solution { public double pow(double x, int n) { if(n==0) return 1; if(n==1) return x; if(n==-1) return 1/x; if(n%2==0){ double tmp=pow(x,n>>1); //减少子递归 return tmp*tmp; }else{ return pow(x,n-1)*x; } } }
若n比较小的时候,可以使用DP法,有效缓存DP的数组,性能会远超递归。当然递归也是有好处的,如果n很大,并且x不确定时,数组的空间会不够,这时就只能递归了。(此题DP法不能通过, pow(0.00001, 2147483647),应该是数组不能开太大)
//DP法: double pow(double x,int n){ boolean isPositive=false; if(n==0) return 1; else if(n<0){ isPositive=true; n*=-1; } double[] result=new double[n+1]; result[1]=x; for(int i=2;i<=n;i++){ if(i%2==0){ result[i]=result[i/2]*result[i/2]; }else{ result[i]=result[i-1]*x; } } if(isPositive) return 1/result[n]; else return result[n]; }
【LeetCode】Pow(x, n),布布扣,bubuko.com
原文:http://blog.csdn.net/navyifanr/article/details/33296475