DEV Community

Subramanya Chakravarthy
Subramanya Chakravarthy

Posted on

1 2

Power of Two - LeetCode

Given an integer, write a function to determine if it is a power of two.

Algorithm:

The intuition here is compare all the 2 ^ i values with n. If they are equal return true else if 2 ^ i is greater than n then return false

Code:

/**
 * @param {number} n
 * @return {boolean}
 */
var isPowerOfTwo = function(n) {
    let cur = 0
    let temp = 1
    while(temp <= n) {
        if(temp == n) {
            return true
        }
        temp = Math.pow(2, cur);
        cur++
    }

    return false
};

Alternative ways:

/**
 * @param {number} n
 * @return {boolean}
 */
var isPowerOfTwo = function(n) {
    return Math.log2(n)%1 === 0
};
/**
 * @param {number} n
 * @return {boolean}
 */
var isPowerOfTwo = function(n) {
    return n < 1 ? false : Number.MAX_VALUE % n == 0
};

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (1)

Collapse
 
ravi1512 profile image
Ravi Mishra

There's an interesting bit property that we can use to solve this. If you AND a number with number - 1, and it's 0 then it is a power of 2. Binary representation of any number which is a power of 2 will have only one set bit and the number less than that will have all bits set except the left most bit. Take 32 for example
32 - 100000
31 - 011111
32 & 31 - 000000

This property won't hold true for numbers which aren't power of 2.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay