29. Implement Pow
The problem can be found at the following link: Problem Link
Problem Description
You are given a floating point number b and an integer e, and your task is to calculate ( b^e ) (b raised to the power of e).
Examples:
Input:
b = 3.00000, e = 5
Output:
243.00000
Input:
b = 0.55000, e = 3
Output:
0.16638
Input:
b = -0.67000, e = -7
Output:
-16.49971
Constraints:
-100.0 < b < 100.0
-109 <= e <= $10^9$
Either b is not zero or e > 0.
-104 <= be <= $10^4$
My Approach
Optimized Binary Exponentiation: The problem can be efficiently solved using the binary exponentiation approach (also known as exponentiation by squaring). This method reduces the number of multiplications required to compute ( b^e ) by breaking the problem down recursively.
Steps:
If
e == 0, return 1, as any number raised to the power of 0 is 1.If
eis negative, calculate the result using $( \frac{1}{b^e} )$.For positive
e, repeatedly divideeby 2, multiplyingbby itself for each halving ofe.The result is obtained by squaring the value of
bfor each step and multiplying it with the current result when necessary.
Optimization: Using a while loop or recursion, the approach reduces the time complexity from O(e) (in the naive approach) to O(log e) , which is significantly faster for large values of
e.
Time and Auxiliary Space Complexity
Expected Time Complexity: $O(log |e|)$, where $(e)$ is the exponent. The exponent is reduced by half in each iteration.
Expected Auxiliary Space Complexity: $O(1)$, as we only use a constant amount of additional space.
Code (C++)
class Solution {
public:
double power(double b, int e) {
if (e == 0) return 1.0;
double half = power(b, e / 2);
return e % 2 == 0 ? half * half : (e > 0 ? b * half * half : (1.0 / b) * half * half);
}
};Code (Java)
class Solution {
public double power(double b, int e) {
if (e == 0) return 1.0;
double half = power(b, e / 2);
return e % 2 == 0 ? half * half : (e > 0 ? b * half * half : (1.0 / b) * half * half);
}
}Code (Python)
class Solution:
def power(self, b: float, e: int) -> float:
result = 1.0
exp = abs(e)
while exp > 0:
if exp % 2 == 1:
result *= b
b *= b
exp //= 2
return result if e >= 0 else 1.0 / resultContribution and Support
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Let’s make this learning journey more collaborative!
⭐ If you find this helpful, please give this repository a star! ⭐
📍Visitor Count
Last updated