这道题不是easy的难度吗?为什么是 medium,看完题我就想到了用分治法把n除以2,分成两个子问题,然后子问题的解合起来就是这个问题的解,于是立马写了如下代码:
class Solution {
public double myPow(double x, int n) {
return n>0 ? myPowCur(x, n) : 1.0/myPowCur(x, -n);
}
public double myPowCur(double x, long n){
if(n == 0)return 1.0;
if(n%2 == 0){
return myPowCur(x,n/2)*myPowCur(x,n/2);
}else{
return myPowCur(x,n/2)*myPowCur(x,n/2)*x;
}
}
}
然后有一个示例超时了,但是我真的不知道该怎么优化了,就看了题解,题解和我的思路一摸一样,甚至代码都几乎一样,只有一个地方不一样就是它用了一个局部变量y接收子问题的返回值,我直接用的函数,服了,题解多用了一个局部变量就不超时了,这是题解代码:
class Solution {
public double myPow(double x, int n) {
return n>0 ? myPowCur(x, n) : 1.0/myPowCur(x, -n);
}
public double myPowCur(double x, long n){
if(n == 0)return 1.0;
double y = myPowCur(x, n/2);
return n%2 == 0 ? y*y : y*y*x;
}
}
好吧,当我是傻逼,刚问的chatgpt,我知道了,我调用了两次myPowCur方法,而题解只调用了一次。