这是一道中等难度的题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 }
浙公网安备 33010602011771号