Pow(x, n)
LeetCode July - Day 16
Problem Statement
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} = \frac{1}{2 * 2} = \frac{1}{4} = 0.25$
Note:
-100.0 < x < 100.0
n is a 32-bit signed integer, within the range [−231, 231 − 1]
Inputs, Outputs, Constraints & Exceptions
- I: number {x}, number {n}
- O: number {ans}
- C: value of n can be large, optimise
- E: n is 0
Code (obvious)
/**
* @param {number} x
* @param {number} n
* @return {number}
*/
function myPow(x, n) {
return Math.pow(x, n)
};
Code (typical)
/**
* @param {number} x
* @param {number} n
* @return {number}
*/
function myPow(x, n) {
if(n === 0) return 1;
let ans = 1;
let pow = Math.abs(n);
while(pow > 0){
if((pow & 1) === 1){
ans *= x;;
}
pow >>>= 1;
x *= x
}
return n < 0 ? 1/ans : ans;
};
Time complexity: O(LogN)
- we are dividing n by 2 in the while loop with each iteration i.e. pow >>>= 1. You could make the case this is O(1) as there would be at most 32 iterations given the input constraints of n
Space complexity: O(1)