这是一道中等难度的题https://leetcode-cn.com/problems/powx-n/

 

 这道题看似简单,其实有很多需要注意的地方,而且最好不要用暴力解,面试官看中是否能用复杂度为O(logn)算法解。

算法:分治法

坑:n为正数最小值取相反数时会溢出

 1 class Solution {
 2     private double cal(double x, long n){
 3         if(n == 1)
 4             return x;
 5         double y = cal(x, n/2); //分治算法,效率更高
 6         if(n % 2 == 0)
 7             return y*y;
 8         else
 9             return x*y*y;
10     }
11     public double myPow(double x, int n) {
12         if(n == 0 || x == 1)
13             return 1;
14         long N = n; //坑:当n取整数最小值时,即-2^32,计算相反数之后是2^32,是会溢出的
15         double res;
16         if(N < 0)
17             res = 1 / cal(x, -N);
18         else
19             res = cal(x, N);
20         return res;
21     }
22 }
View Code

 

posted on 2020-05-11 15:46  小小糖果tt  阅读(78)  评论(0)    收藏  举报