DEV Community

Jaspreet singh
Jaspreet singh

Posted on

Pow(x, n)

One of the most common interview questions involving recursion, mathematics, and binary thinking is implementing the power function efficiently.

Problem

Implement:

pow(x, n)
Enter fullscreen mode Exit fullscreen mode

which calculates:

xⁿ
Enter fullscreen mode Exit fullscreen mode

without using built-in power functions.


Brute Force Approach

Multiply x exactly n times.

double ans = 1.0;

for(int i = 0; i < n; i++) {
    ans *= x;
}
Enter fullscreen mode Exit fullscreen mode

Complexity

  • Time: O(n)
  • Space: O(1)

This works for small values but becomes inefficient when n is very large.


Key Observation

Let's calculate:

2¹⁰
Enter fullscreen mode Exit fullscreen mode

Instead of multiplying 2 ten times:

2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2
Enter fullscreen mode Exit fullscreen mode

we can use:

2¹⁰ = (2²)⁵
Enter fullscreen mode Exit fullscreen mode

and

2² = 4
2⁴ = 16
2⁸ = 256
Enter fullscreen mode Exit fullscreen mode

We're reducing the exponent by half every time.

This is called Binary Exponentiation.


Intuition

For every exponent:

If exponent is even

xⁿ = (x²)ⁿᐟ²
Enter fullscreen mode Exit fullscreen mode

Example:

2¹⁰
→ 4⁵
Enter fullscreen mode Exit fullscreen mode

If exponent is odd

Take one x into the answer and reduce exponent by one.

2⁵
→ 2 × 2⁴
Enter fullscreen mode Exit fullscreen mode

Optimal Solution

class Solution {
    public double myPow(double x, int n) {

        long power = n;
        double ans = 1.0;

        if (power < 0) {
            x = 1 / x;
            power = -power;
        }

        while (power > 0) {

            if (power % 2 == 0) {
                x *= x;
                power /= 2;
            } else {
                ans *= x;
                power--;
            }
        }

        return ans;
    }
}
Enter fullscreen mode Exit fullscreen mode

Dry Run

Input:

x = 2
n = 10
Enter fullscreen mode Exit fullscreen mode

Initial:

ans = 1
Enter fullscreen mode Exit fullscreen mode

Step 1:

10 is even

x = 4
power = 5
Enter fullscreen mode Exit fullscreen mode

Step 2:

5 is odd

ans = 4
power = 4
Enter fullscreen mode Exit fullscreen mode

Step 3:

4 is even

x = 16
power = 2
Enter fullscreen mode Exit fullscreen mode

Step 4:

2 is even

x = 256
power = 1
Enter fullscreen mode Exit fullscreen mode

Step 5:

1 is odd

ans = 1024
power = 0
Enter fullscreen mode Exit fullscreen mode

Answer:

1024
Enter fullscreen mode Exit fullscreen mode

Important Edge Case

Consider:

n = Integer.MIN_VALUE;
Enter fullscreen mode Exit fullscreen mode
-2147483648
Enter fullscreen mode Exit fullscreen mode

Doing:

n = -n;
Enter fullscreen mode Exit fullscreen mode

causes overflow because:

2147483648
Enter fullscreen mode Exit fullscreen mode

cannot fit inside an integer.

Therefore always store the exponent in:

long power = n;
Enter fullscreen mode Exit fullscreen mode

before negating it.


Complexity Analysis

Time Complexity

O(log n)
Enter fullscreen mode Exit fullscreen mode

The exponent is halved at every step.

Space Complexity

O(1)
Enter fullscreen mode Exit fullscreen mode

Interview Takeaway

Whenever you see:

aᵇ
Enter fullscreen mode Exit fullscreen mode

think:

Can I process the exponent bit by bit?

Binary Exponentiation is a powerful pattern that appears in:

  • Fast Power
  • Matrix Exponentiation
  • Modular Arithmetic
  • Competitive Programming
  • System Design Calculations

Remember:

Odd exponent  -> Take one x into answer
Even exponent -> Square x and halve exponent
Enter fullscreen mode Exit fullscreen mode

That's the entire algorithm.

I'm currently solving the Striver SDE Sheet Challenge and documenting my learnings, patterns, mistakes, and interview insights along the way.

LinkedIn: https://www.linkedin.com/in/jaspreetsodhi482/
X (Twitter): https://x.com/Jaspree54799902
GitHub: https://github.com/codewithjaspreet

Top comments (0)