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
e
is negative, calculate the result using $( \frac{1}{b^e} )$.For positive
e
, repeatedly dividee
by 2, multiplyingb
by itself for each halving ofe
.The result is obtained by squaring the value of
b
for 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 / result
Contribution 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