Power of Two Difference
Power of Two Difference
Problem Description
Given an integer n
, return true
if it is a possible difference between powers of two. Otherwise, return false
.
An integer n
is a difference between powers of two if there exist two integers x
and y
, where x >= y >= 0
, such that n == 2^x - 2^y
.
Solution Approach
The problem can be solved using an elegant solution. We can observe that if n = 2^x - 2^y
, then n = 2^y * (2^(x-y) - 1)
. Let's call y
as M
and x - y
as N
. Now, we observe that 2^N - 1
is a binary number of the form 111...111
, where 1 is repeated N
times. Multiplying a binary number by 2^M
will add 0
M
times to the right. Therefore, our result is of the form 11...1100...00
, where 1 is repeated some times followed by 0 repeated some times or 0 times. For example, 0 is true, 7 is true because it's 111, 12 is true because it's 1100, whereas 5 is false because it's 101 and 13 is false because it's 1101.
To solve the problem, we need to find the binary expansion of N
and check if it's of the form 11...1100...000
.
Playground Link
You can access the playground link that includes the solution code.
Example Test Cases
Test Case 1:
Input:
n = 0
Output:
true
Explanation:
0 = 2^0 - 2^0
Test Case 2:
Input:
n = 12
Output:
true
Explanation:
12 = 2^4 - 2^2
Test Case 3:
Input:
n = 7
Output:
true
Explanation:
7 = 2^3 - 2^0
Test Case 4:
Input:
n = 5
Output:
false
Explanation:
It is not possible to represent 5 as a difference of powers of 2.
Tags
Math, Bit Manipulation
Comments
Post a Comment