Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Check Power of 3 Explained

Problem Statement

Given an integer n, determine if it is a power of 3, i.e., if there exists an integer k such that n = 3^k. This problem tests your ability to work with number properties and avoid floating-point precision issues when checking divisibility by 3 repeatedly.

Example

Input: n = 27

Output: true

Explanation: 27 = 3^3, so it is a power of 3.

Code

Java
Python
JavaScript
public class Solution {
    public boolean isPowerOfThree(int n) {
        if (n <= 0) return false;
        while (n > 1) {
            if (n % 3 != 0) return false;
            n /= 3;
        }
        return true;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.isPowerOfThree(27)); // true
    }
}
            
def is_power_of_three(n):
    if n <= 0:
        return False
    while n > 1:
        if n % 3 != 0:
            return False
        n //= 3
    return True

# Example usage
print(is_power_of_three(27))  # True
            
function isPowerOfThree(n) {
    if (n <= 0) return false;
    while (n > 1) {
        if (n % 3 !== 0) return false;
        n = Math.floor(n / 3);
    }
    return true;
}

// Example usage
console.log(isPowerOfThree(27)); // true
            

Explanation

  • If n is less than or equal to 0, it cannot be a power of 3.
  • Repeatedly divide n by 3 as long as it’s greater than 1.
  • If any division leaves a remainder, n is not a power of 3.
  • If n reduces to 1, it is a power of 3.

Note

The time complexity is O(log n) with base 3. An alternative mathematical approach uses the fact that the largest power of 3 within 32-bit integer limits (3^19 = 1162261467) can be used to check if n divides it evenly.