leetCode练习(50)

来源:互联网 发布:全文翻译的软件 编辑:程序博客网 时间:2024/05/22 06:54

题目:Pow(x, n)

难度:medium

问题描述:

Implement pow(x, n).

解题思路:

实现幂函数,这里的题目x为实数,n为整数。注意n可以为负~数学差的我一开始就忘记了这一条件。

直接想到的方法就是for循环实现。简单代码如下:

public double myPow(double x, int n) {double res=1.0;if(n==0)return 1.0;if(n>0){for(int i=0;i<n;i++){res=res*x;}return res;}else{for(int i=0;i<-n;i++){res=res*x;}return 1/res;}    }

提交后提示时间超时。这里的时间复杂度是O(n),想要进一步减小复杂度,可以想到类似分治算法,pow(x,n)=pow(x,n/2)*pow(x,n-b/2);

具体实现如下:

public double myPow2(double x, int n) {double half;if(n==0) return 1.0;if(n>0){half=(double)myPow2(x,n/2);if(n%2==0){return (double)half*half;}else{return (double)x*half*half;}}else{if(n==Integer.MIN_VALUE){return (1/x)*(1/myPow(x,-(n+1)));}else{return 1/myPow(x,-n);}}    }
需要在负数转正的边界问题上注意一下即可。




0 0
原创粉丝点击