βPalindromic Binary Representation
int getReverse(int n) {
int rev = 0;
while(n) {
int lb = n & 1;
rev |= lb;
n >>= 1;
rev <<= 1;
}
rev >>= 1;
return rev;
}
int Solution::solve(int n) {
int count = 1;
int len = 1;
while(count < n) {
len++;
int elementsForThisLen = (1 << (len - 1) / 2);
count += elementsForThisLen;
}
count -= (1 << (len - 1) / 2);
int offset = n - count - 1;
int ans = (1 << (len - 1));
ans |= (offset << (len / 2));
int valForReverse = (ans >> (len / 2));
int rev = getReverse(valForReverse);
ans |= rev;
return ans;
}
Last updated