本文主要是介绍leetcode 刷题之路 36 Pow(x, n),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Implement pow(x, n).
通过循环n次相乘的方法可以得到结果,但是时间效率不高,可能会引起Time Limited Exceed错误。
采用二分法可以达到O(logn)的时间复杂度,采用递归比较容易实现,需要注意的是当输入为-2147483648时,是不能直接变化成1.0/pow(-n)的,因为整数中负数的范围是-2147483648到2147483647,-2147483648没有对应的正数,程序中要做特殊处理。
accepted answer:
class Solution {
public:double pow(double x, int n) { if(n<0){if(n==INT_MIN) //最小的int负值的绝对值比最大的int正值大1,因此不能用-n表示return 1.0/(x*pow(x,INT_MAX));elsereturn 1.0/pow(x,-n);}if(n==0)return 1.0;if(n<0)return 1.0/pow(x,-n);if(n==1)return x;double temp=pow(x,n/2);if(n%2==0)return temp*temp;elsereturn temp*temp*x;}
};
这篇关于leetcode 刷题之路 36 Pow(x, n)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!