[LeetCode July Challange]Day16-Pow(x, n)
Implement pow(x, n), which calculates x raised to the power n (xn).
Example 1:
Input: 2.00000, 10
Output: 1024.00000
Example 2:
Input: 2.10000, 3
Output: 9.26100
Example 3:
Input: 2.00000, -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25
Note:
- -100.0 < x < 100.0
- n is a 32-bit signed integer, within the range [−231, 231 − 1]
solution
time complexity : O(logn)
space complexity : O(logn)
class Solution {
public:
double myPow(double x, int n) {
return n > 0 ? helper(x, n) : 1 / helper(x, n);
}
private:
double helper(double x, int n) {
if (n == 0) return 1;
return helper(x*x, n/2) * (n % 2 ? x : 1);
}
};
若用暴力法解O(n),會發生Time Limit Exceeded。
上網找了個解法,利用recursion來減少執行時間。
原理:
pow(x, n) := pow(x * x, n / 2) * (x if n % 2 else 1)
pow(x, 0) := 1
舉個例子:
pow(x, 5) = pow(x^2, 2) * x
= pow(x^4, 1) * x
= pow(x^8, 0) * x^4 * x
= 1 * x^4 * x = x^5