Nth Binary Palindrome (original) (raw)

Last Updated : 11 Apr, 2026

0Find the nth number whose binary representation is a palindrome, ignoring leading zeros, with the sequence starting from 1 (not 0).

**Examples:

**Input : 1
**Output : 1
**Explanation: 1st Number whose binary representation
is palindrome is 1 (1)

**Input : 9
**Output : 27
**Explanation: 9th Number whose binary representation
is palindrome is 27 (11011)

Table of Content

[Naive Approach] Iterative Method

Iterate through all integers starting from 1 and examine their binary representation using bit operations. Compare bits from both ends to determine if the number forms a palindrome. Count each valid case and return the number when the count reaches n.

#include #include using namespace std;

// Check if k-th bit (1-based) is set int isKthBitSet(int x, int k) {

return (x & (1 << (k - 1))) ? 1 : 0;

}

// Get number of bits in x int leftmostSetBit(int x) {

int count = 0;
while (x) {
    count++;
    x >>= 1;
}
return count;

}

// Check if binary form is palindrome int isBinPalindrome(int x) {

int l = leftmostSetBit(x), r = 1;

while (l > r) {
    if (isKthBitSet(x, l) != isKthBitSet(x, r))
        return 0;
    l--;
    r++;
}
return 1;

}

// Find nth binary palindrome number int findNthPalindrome(int n) {

int pal_count = 0;

// Traverse through all the integers
for (int i = 1; i <= INT_MAX; i++) {
    if (isBinPalindrome(i))
        pal_count++;
        
    // Break the loop when count reaches n
    if (pal_count == n)
        return i;
}
return -1;

}

int main() { int n = 9;

cout << findNthPalindrome(n);

}

C

#include <stdio.h> #include <limits.h>

// Check if k-th bit (1-based) is set int isKthBitSet(int x, int k) {

return (x & (1 << (k - 1))) ? 1 : 0;

}

// Get number of bits in x int leftmostSetBit(int x) {

int count = 0;
while (x) {
    count++;
    x = x >> 1;
}
return count;

}

// Check if binary form is palindrome int isBinPalindrome(int x) {

int l = leftmostSetBit(x);
int r = 1;

// One by one compare bits
while (l > r) {

    // Compare left and right bits and converge
    if (isKthBitSet(x, l) != isKthBitSet(x, r))
        return 0;
    l--;
    r++;
}
return 1;

}

// Find nth binary palindrome number int findNthPalindrome(int n) {

int pal_count = 0;

// Traverse through all the integers
for (int i = 1; i <= INT_MAX; i++) {
    if (isBinPalindrome(i)) {
        pal_count++;
    }
    
    // Break the loop when count reaches n
    if (pal_count == n)
        return i;
}

return -1;

}

int main() { int n = 9;

printf("%d", findNthPalindrome(n));

}

Java

import java.io.*;

class GFG { static int INT_MAX = 2147483647;

// Check if k-th bit (1-based) is set
static int isKthBitSet(int x, int k)
{
    return ((x & (1 << (k - 1))) > 0) ? 1 : 0;
}

// Get number of bits in x
static int leftmostSetBit(int x)
{
    int count = 0;
    while (x > 0) {
        count++;
        x = x >> 1;
    }
    return count;
}

// Check if binary form is palindrome
static int isBinPalindrome(int x)
{
    int l = leftmostSetBit(x);
    int r = 1;

    // One by one compare bits
    while (l > r) {

        // Compare left and right bits and converge
        if (isKthBitSet(x, l) != isKthBitSet(x, r))
            return 0;
        l--;
        r++;
    }
    return 1;
}

// Find nth binary palindrome number
static int findNthPalindrome(int n)
{
    int pal_count = 0;

    // Traverse through all the integers
    for (int i = 1; i <= INT_MAX; i++) {
        if (isBinPalindrome(i) > 0)
            pal_count++;

        // Break the loop when count reaches n
        if (pal_count == n)
            return i;
    }

    return -1;
}

public static void main(String[] args)
{
    int n = 9;

    System.out.println(findNthPalindrome(n));
}

}

Python

INT_MAX = 2147483647

Check if k-th bit (1-based) is set

def isKthBitSet(x, k):

return 1 if (x & (1 << (k - 1))) else 0

Get number of bits in x

def leftmostSetBit(x):

count = 0
while x:
    count += 1
    x >>= 1
return count

Check if binary form is palindrome

def isBinPalindrome(x):

l = leftmostSetBit(x)
r = 1

# One by one compare bits
while l > r:

    # Compare left and right bits and converge
    if isKthBitSet(x, l) != isKthBitSet(x, r):
        return 0
    l -= 1
    r += 1
return 1

Find nth binary palindrome number

def findNthPalindrome(n):

pal_count = 0

# Traverse through all the integers
for i in range(1, INT_MAX + 1):
    if isBinPalindrome(i):
        pal_count += 1

    # Break the loop when count reaches n
    if pal_count == n:
        return i

return -1

if name == "main": n = 9

print(findNthPalindrome(n))

C#

using System;

class GFG {

static int INT_MAX = 2147483647;

// Check if k-th bit (1-based) is set
static int isKthBitSet(int x, int k)
{
    return ((x & (1 << (k - 1))) > 0) ? 1 : 0;
}

// Get number of bits in x
static int leftmostSetBit(int x)
{
    int count = 0;
    while (x > 0) {
        count++;
        x = x >> 1;
    }
    return count;
}

// Check if binary form is palindrome
static int isBinPalindrome(int x)
{
    int l = leftmostSetBit(x);
    int r = 1;

    // One by one compare bits
    while (l > r) {

        // Compare left and right bits and converge
        if (isKthBitSet(x, l) != isKthBitSet(x, r))
            return 0;
        l--;
        r++;
    }
    return 1;
}

// Find nth binary palindrome number
static int findNthPalindrome(int n)
{
    int pal_count = 0;

    // Traverse through all the integers
    for (int i = 1; i <= INT_MAX; i++) {
        if (isBinPalindrome(i) > 0)
            pal_count++;

        // Break the loop when count reaches n
        if (pal_count == n)
            return i;
    }

    return -1;
}

static public void Main()
{
    int n = 9;

    Console.WriteLine(findNthPalindrome(n));
}

}

JavaScript

let INT_MAX = 2147483647;

// Check if k-th bit (1-based) is set function isKthBitSet(x, k) { return ((x & (1 << (k - 1))) > 0) ? 1 : 0; }

// Get number of bits in x function leftmostSetBit(x) { let count = 0;

while (x > 0)
{
    count++;
    x = x >> 1;
}
return count;

}

// Check if binary form is palindrome function isBinPalindrome(x) { let l = leftmostSetBit(x); let r = 1;

// One by one compare bits
while (l > r)
{
    // Compare left and right bits and converge
    if (isKthBitSet(x, l) != isKthBitSet(x, r))
        return 0;
        
    l--;
    r++;
}
return 1;

}

// Find nth binary palindrome number function findNthPalindrome(n) { let pal_count = 0;

// Traverse through all the integers
for (let i = 1; i <= INT_MAX; i++) 
{
    if (isBinPalindrome(i) > 0)
        pal_count++;

    // Break the loop when count reaches n
    if (pal_count == n)
        return i;
}
return -1;

}

// Driver code let n = 9;

console.log(findNthPalindrome(n));

`

**Time complexity: O(x * log x ), Iterate up to the nth palindrome number (x), and each check takes O(log x) time due to bit comparison.

**Auxiliary Space: O(1).

[Better Approach] Using BFS - O(n) Time and O(n) Space

Use BFS (queue) to generate binary palindromes level by level starting from "11". At each step, expand the current string by inserting bits at the middle to form new palindromes. Continue this level-wise generation until the nth palindrome is reached and return its integer value.

11

C++ `

#include #include #include using namespace std;

// Convert binary string into integer int convertStringToInt(string s) { int num = 0;

for (int i = 0; i < s.size(); i++)
    num = num * 2 + (s[i] - '0');

return num;

}

// Find nth binary palindrome number int getNthNumber(int n) { // Base case if (n == 1) return 1;

n--;

// Store binary palindrome strings
queue<string> q;

// Initialize with second palindrome
q.push("11");

// Generate palindromes using BFS
while (!q.empty()) {

    string curr = q.front();
    q.pop();
    n--;

    // Return when nth palindrome is reached
    if (!n)
        return convertStringToInt(curr);

    int mid = curr.size() / 2;

    // If length is even, insert 0 and 1 at middle
    if (curr.size() % 2 == 0) {
        string s0 = curr, s1 = curr;
        s0.insert(mid, "0");
        s1.insert(mid, "1");
        q.push(s0);
        q.push(s1);
    }
    
    // If length is odd, duplicate middle character
    else {
        string temp = curr;
        temp.insert(mid, string(1, curr[mid]));
        q.push(temp);
    }
}

return 0;

}

int main() { int n = 9;

cout << getNthNumber(n);

}

Java

import java.io.; import java.util.;

class GFG {

// Convert binary string into integer
public static int convertStringToInt(String s)
{
    int num = 0;

    for (int i = 0; i < s.length(); i++)
        num = num * 2 + (s.charAt(i) - '0');

    return num;
}

// Find nth binary palindrome number
public static int getNthNumber(int n)
{
    // Base case
    if (n == 1)
        return 1;

    n--;

    // Store binary palindrome strings
    Queue<String> q = new LinkedList<>();

    // Initialize with second palindrome
    q.add("11");

    // Generate palindromes using BFS
    while (!q.isEmpty()) {

        String curr = q.poll();
        n--;

        // Return when nth palindrome is reached
        if (n == 0)
            return convertStringToInt(curr);

        int mid = curr.length() / 2;

        // If length is even, insert 0 and 1 at middle
        if (curr.length() % 2 == 0) {
            q.add(curr.substring(0, mid) + "0" + curr.substring(mid));
            q.add(curr.substring(0, mid) + "1" + curr.substring(mid));
        }
        
        // If length is odd, duplicate middle character
        else {
            char midChar = curr.charAt(mid);
            q.add(curr.substring(0, mid) + midChar + curr.substring(mid));
        }
    }

    return -1;
}

public static void main(String[] args)
{
    int n = 9;

    System.out.println(getNthNumber(n));
}

}

Python

Convert binary string into integer

def convertStringToInt(s):

num = 0

for i in range(len(s)):
    num = num * 2 + (ord(s[i]) - ord('0'))

return num

Find nth binary palindrome number

def getNthNumber(n):

# Base case
if n == 1:
    return 1

n -= 1

# Store binary palindrome strings
q = []

# Initialize with second palindrome
q.append("11")

# Generate palindromes using BFS
while len(q) != 0:

    curr = q.pop(0)
    n -= 1

    # Return when nth palindrome is reached
    if n == 0:
        return convertStringToInt(curr)

    mid = len(curr) // 2

    # If length is even, insert 0 and 1 at middle
    if len(curr) % 2 == 0:
        q.append(curr[:mid] + "0" + curr[mid:])
        q.append(curr[:mid] + "1" + curr[mid:])
    
    # If length is odd, duplicate middle character
    else:
        q.append(curr[:mid] + curr[mid] + curr[mid:])

return 0

if name == "main": n = 9

print(getNthNumber(n))

C#

using System; using System.Collections.Generic;

class GFG{

// Convert binary string into integer public static int convertStringToInt(String s) { int num = 0;

for(int i = 0; i < s.Length; i++) 
    num = num * 2 + (s[i] - '0');

return num;

}

// Find nth binary palindrome number public static int getNthNumber(int n) { // Base case if (n == 1) return 1;

n--;

// Store binary palindrome strings
Queue<String> q = new Queue<String>();

// Initialize with second palindrome
q.Enqueue("11");

// Generate palindromes using BFS
while (q.Count > 0) 
{
    String curr = q.Dequeue();
    n--;

    // Return when nth palindrome is reached
    if (n == 0)
        return convertStringToInt(curr);

    int mid = curr.Length / 2;

    // If length is even, insert 0 and 1 at middle
    if (curr.Length % 2 == 0)
    {
        q.Enqueue(curr.Substring(0, mid) + "0" + curr.Substring(mid));
        q.Enqueue(curr.Substring(0, mid) + "1" + curr.Substring(mid));
    }

    // If length is odd, duplicate middle character
    else 
    {
        q.Enqueue(curr.Substring(0, mid) + curr[mid] + curr.Substring(mid));
    }
}
return -1;

}

public static void Main(String[] args) { int n = 9;

Console.WriteLine(getNthNumber(n));

} }

JavaScript

// Convert binary string into integer function convertStringToInt(s) { let num = 0;

for (let i = 0; i < s.length; i++)
    num = num * 2 + (s[i] - '0');

return num;

}

// Find nth binary palindrome number function getNthNumber(n) { // Base case if (n == 1) return 1;

n--;

// Store binary palindrome strings
let q = [];

// Initialize with second palindrome
q.push("11");

// Generate palindromes using BFS
while (q.length > 0) {

    let curr = q.shift();
    n--;

    // Return when nth palindrome is reached
    if (n == 0)
        return convertStringToInt(curr);

    let mid = Math.floor(curr.length / 2);

    // If length is even, insert 0 and 1 at middle
    if (curr.length % 2 == 0) {
        q.push(curr.substring(0, mid) + "0" + curr.substring(mid));
        q.push(curr.substring(0, mid) + "1" + curr.substring(mid));
    }
    
    // If length is odd, duplicate middle character
    else {
        q.push(curr.substring(0, mid) + curr[mid] + curr.substring(mid));
    }
}

return -1;

}

// Driver code let n = 9;

console.log(getNthNumber(n));

`

[Expected Approach] Constructing the nth palindrome - O(1) Time and O(1) Space

If we observe the first few binary palindromes it can be divided into groups based on their length:

Group 1 is formed by taking two 1s at the corner and filling 0 or 1 bits in between
Group 2 is formed by taking two 1s at the corner and filling 2 or 3 bits in between
Group 3 is formed by taking two 1s at the corner and filling 4 or 5 bits in between

The number of palindromes in a group is given by 3 * 2^(groupNo - 1) for groupNo >= 1, and for groupNo = 0, there is only 1 palindrome.

Now, directly construct the nth binary palindrome using group and offset. Use symmetry to fix outer bits and determine middle and inner bits.

**Let us construct the 8th binary palindrome number
The group number will be 2, and no.of elements before that group are 1 + 3 * 2^1 which is 4

So the offset for the 8th element will be 8 - 4 - 1 = 3

And first 2^(groupno - 1) = 2^1, elements will have even length(in binary representation) of 2*groupno, next 2^groupno elements will have odd
length(in binary representation) of 2*groupno + 1

Place bit 1 as the first bit and as the last bit (firstbit: 0, last bit: 2*groupno or 2*groupno - 1)

As the offset is 3, 4th(3 + 1) element in the group, will have odd length and have 1 in the middle

Below is the table of middle bit to be used for the given offset for the group 2

offset middle bit
0 |
1 |
2 0
3 1
4 0
5 1

And we should be filling the binary representation of number 0(((groupoffset) - 2^(groupno-1)) /2) from middle n both directions 1 0 1 0 1

FirstElement Number MiddleElement Number LastElement
1 0 1 0 1

The 8th number will be 21

C++ `

#include using namespace std;

// Construct the nth binary palindrome using // group number, auxiliary number and operation type int constructNthNumber(int group_no, int aux_num, int op) { int INT_SIZE = 32; int a[INT_SIZE] = {0}; int num = 0, len_f; int i = 0;

// No middle bit
if (op == 2) 
{
    // Final length
    len_f = 2 * group_no;

    // Set first and last bit
    a[len_f - 1] = a[0] = 1;

    // Fill bits symmetrically from middle
    while (aux_num) 
    {
        a[group_no + i] = a[group_no - 1 - i] = aux_num & 1;
        aux_num >>= 1;
        i++;
    }
}

// Insert 0 in middle
else if (op == 0)
{
    // Final length
    len_f = 2 * group_no + 1;

    // Set first, last and middle bit
    a[len_f - 1] = a[0] = 1;
    a[group_no] = 0;

    // Fill remaining bits symmetrically
    while (aux_num)
    {
        a[group_no + 1 + i] = a[group_no - 1 - i] = aux_num & 1;
        aux_num >>= 1;
        i++;
    }
}

// Insert 1 in middle
else 
{
    // Final length
    len_f = 2 * group_no + 1;

    // Set first, last and middle bit
    a[len_f - 1] = a[0] = 1;
    a[group_no] = 1;

    // Fill remaining bits symmetrically
    while (aux_num) 
    {
        a[group_no + 1 + i] = a[group_no - 1 - i] = aux_num & 1;
        aux_num >>= 1;
        i++;
    }
}

// Convert binary array to decimal
for (i = 0; i < len_f; i++)
    num += (1 << i) * a[i];
    
return num;

}

// Find nth binary palindrome number int getNthNumber(int n) { int group_no = 0, group_offset; int count_upto_group = 0, count_temp = 1; int op, aux_num;

// Find the group where nth element lies
while (count_temp < n)
{
    group_no++;
    count_upto_group = count_temp;
    count_temp += 3 * (1 << (group_no - 1));
}

// Offset inside the group
group_offset = n - count_upto_group - 1;

// Decide middle bit and auxiliary number
if ((group_offset + 1) <= (1 << (group_no - 1)))
{
    op = 2; 
    aux_num = group_offset;
}
else
{
    if (((group_offset + 1) - (1 << (group_no - 1))) % 2)
        op = 0; 
    else
        op = 1;

    aux_num = (group_offset - (1 << (group_no - 1))) / 2;
}

return constructNthNumber(group_no, aux_num, op);

}

int main() { int n = 9;

cout << getNthNumber(n);

}

C

#include <stdio.h> #define INT_SIZE 32

// Construct the nth binary palindrome using // group number, auxiliary number and operation type int constructNthNumber(int group_no, int aux_num, int op) { int a[INT_SIZE] = {0};

int num = 0, len_f;
int i = 0;

// No middle bit
if (op == 2) 
{
    // Final length
    len_f = 2 * group_no;

    // Set first and last bit
    a[len_f - 1] = a[0] = 1;

    // Fill bits symmetrically from middle
    while (aux_num) 
    {
        a[group_no + i] = a[group_no - 1 - i] = aux_num & 1;
        aux_num >>= 1;
        i++;
    }
}

// Insert 0 in middle
else if (op == 0) 
{
    // Final length
    len_f = 2 * group_no + 1;

    // Set first, last and middle bit
    a[len_f - 1] = a[0] = 1;
    a[group_no] = 0;

    // Fill remaining bits symmetrically
    while (aux_num) 
    {
        a[group_no + 1 + i] = a[group_no - 1 - i] = aux_num & 1;
        aux_num >>= 1;
        i++;
    }
}

// Insert 1 in middle
else 
{
    // Final length
    len_f = 2 * group_no + 1;

    // Set first, last and middle bit
    a[len_f - 1] = a[0] = 1;
    a[group_no] = 1;

    // Fill remaining bits symmetrically
    while (aux_num) 
    {
        a[group_no + 1 + i] = a[group_no - 1 - i] = aux_num & 1;
        aux_num >>= 1;
        i++;
    }
}

// Convert binary array to decimal
for (i = 0; i < len_f; i++)
    num += (1 << i) * a[i];

return num;

}

// Find nth binary palindrome number int getNthNumber(int n) { int group_no = 0, group_offset; int count_upto_group = 0, count_temp = 1; int op, aux_num;

// Find the group where nth element lies
while (count_temp < n) 
{
    group_no++;

    count_upto_group = count_temp;
    count_temp += 3 * (1 << (group_no - 1));
}

// Offset inside the group
group_offset = n - count_upto_group - 1;

// Decide middle bit and auxiliary number
if ((group_offset + 1) <= (1 << (group_no - 1))) 
{
    op = 2; 
    aux_num = group_offset;
}
else 
{
    if (((group_offset + 1) - (1 << (group_no - 1))) % 2)
        op = 0; 
    else
        op = 1;

    aux_num = (group_offset - (1 << (group_no - 1))) / 2;
}

return constructNthNumber(group_no, aux_num, op);

}

int main() { int n = 9;

printf("%d", getNthNumber(n));
return 0;

}

Java

class GFG {

static int INT_SIZE = 32;

// Construct the nth binary palindrome using
// group number, auxiliary number and operation type
static int constructNthNumber(int group_no, int aux_num,
                              int op)
{
    int a[] = new int[INT_SIZE];

    int num = 0, len_f;
    int i = 0;

    // No middle bit
    if (op == 2) {
        
        // Final length
        len_f = 2 * group_no;

        // Set first and last bit
        a[len_f - 1] = a[0] = 1;

        // Fill bits symmetrically from middle
        while (aux_num > 0) {
            a[group_no + i] 
                = a[group_no - 1 - i]
                = aux_num & 1;
            aux_num = aux_num >> 1;
            i++;
        }
    }

    // Insert 0 in middle
    else if (op == 0) {
        
        // Final length
        len_f = 2 * group_no + 1;

        // Set first, last and middle bit
        a[len_f - 1] = a[0] = 1;
        a[group_no] = 0;

        // Fill remaining bits symmetrically
        while (aux_num > 0) {
            a[group_no + 1 + i] 
                = a[group_no - 1 - i]
                = aux_num & 1;
            aux_num = aux_num >> 1;
            i++;
        }
    }
    
    // Insert 1 in middle
    else 
    {
        // Final length
        len_f = 2 * group_no + 1;

        // Set first, last and middle bit
        a[len_f - 1] = a[0] = 1;
        a[group_no] = 1;

        // Fill remaining bits symmetrically
        while (aux_num > 0) {
            a[group_no + 1 + i] 
                = a[group_no - 1 - i]
                = aux_num & 1;
            aux_num = aux_num >> 1;
            i++;
        }
    }

    // Convert binary array to decimal
    for (i = 0; i < len_f; i++)
        num += (1 << i) * a[i];
    return num;
}

// Find nth binary palindrome number
static int getNthNumber(int n)
{
    int group_no = 0, group_offset;
    int count_upto_group = 0, count_temp = 1;
    int op, aux_num;

    // Find the group where nth element lies
    while (count_temp < n) {
        group_no++;

        count_upto_group = count_temp;
        count_temp += 3 * (1 << (group_no - 1));
    }

    // Offset inside the group
    group_offset = n - count_upto_group - 1;

    // Decide middle bit and auxiliary number
    if ((group_offset + 1) <= (1 << (group_no - 1))) {
        op = 2;

        aux_num = group_offset;
    }
    else {
        if (((group_offset + 1) 
             - (1 << (group_no - 1))) % 2 == 1)
            op = 0;
        else
            op = 1;

        aux_num
            = (group_offset 
            - (1 << (group_no - 1))) / 2;
    }

    return constructNthNumber(group_no, aux_num, op);
}

public static void main(String[] args)
{
    int n = 9;
  
    System.out.printf("%d", getNthNumber(n));
}

}

Python

INT_SIZE = 32

Construct the nth binary palindrome using

group number, auxiliary number and operation type

def constructNthNumber(group_no, aux_num, op):

a = [0] * INT_SIZE
num, i = 0, 0

# No middle bit
if op == 2:

    # Final length
    len_f = 2 * group_no

    # Set first and last bit
    a[len_f - 1] = a[0] = 1

    # Fill bits symmetrically from middle
    while aux_num:
        a[group_no + i] = a[group_no - 1 - i] = aux_num & 1
        aux_num >>= 1
        i += 1

# Insert 0 in middle
elif op == 0:

    # Final length
    len_f = 2 * group_no + 1

    # Set first, last and middle bit
    a[len_f - 1] = a[0] = 1
    a[group_no] = 0

    # Fill remaining bits symmetrically
    while aux_num:
        a[group_no + 1 + i] = a[group_no - 1 - i] = aux_num & 1
        aux_num >>= 1
        i += 1

# Insert 1 in middle
else:

    # Final length
    len_f = 2 * group_no + 1

    # Set first, last and middle bit
    a[len_f - 1] = a[0] = 1
    a[group_no] = 1

    # Fill remaining bits symmetrically
    while aux_num:
        a[group_no + 1 + i] = a[group_no - 1 - i] = aux_num & 1
        aux_num >>= 1
        i += 1

# Convert binary array to decimal
for i in range(len_f):
    num += (1 << i) * a[i]
return num

Find nth binary palindrome number

def getNthNumber(n):

group_no = 0
count_upto_group, count_temp = 0, 1

# Find the group where nth element lies
while count_temp < n:

    group_no += 1
    count_upto_group = count_temp
    count_temp += 3 * (1 << (group_no - 1))

# Offset inside the group
group_offset = n - count_upto_group - 1

# Decide middle bit and auxiliary number
if (group_offset + 1) <= (1 << (group_no - 1)):

    op = 2
    aux_num = group_offset

else:

    if ((group_offset + 1 - (1 << (group_no - 1))) % 2):
        op = 0
    else:
        op = 1

    aux_num = (group_offset - (1 << (group_no - 1))) // 2

return constructNthNumber(group_no, aux_num, op)

if name == "main":

n = 9

print(getNthNumber(n))

C#

using System;

class GFG {

static int INT_SIZE = 32;

// Construct the nth binary palindrome using
// group number, auxiliary number and operation type
static int constructNthNumber(int group_no, int aux_num,
                              int op)
{
    int[] a = new int[INT_SIZE];

    int num = 0, len_f;
    int i = 0;

    // No middle bit
    if (op == 2) {
       
        // Final length
        len_f = 2 * group_no;

        // Set first and last bit
        a[len_f - 1] = a[0] = 1;

        // Fill bits symmetrically from middle
        while (aux_num > 0) {
            a[group_no + i] = a[group_no - 1 - i]
                = aux_num & 1;
            aux_num = aux_num >> 1;
            i++;
        }
    }

    // Insert 0 in middle
    else if (op == 0) {
       
        // Final length
        len_f = 2 * group_no + 1;

        // Set first, last and middle bit
        a[len_f - 1] = a[0] = 1;
        a[group_no] = 0;

        // Fill remaining bits symmetrically
        while (aux_num > 0) {
            a[group_no + 1 + i] = a[group_no - 1 - i]
                = aux_num & 1;
            aux_num = aux_num >> 1;
            i++;
        }
    }
    
    // Insert 1 in middle
    else 
    {
        // Final length
        len_f = 2 * group_no + 1;

        // Set first, last and middle bit
        a[len_f - 1] = a[0] = 1;
        a[group_no] = 1;

        // Fill remaining bits symmetrically
        while (aux_num > 0) {
            a[group_no + 1 + i] = a[group_no - 1 - i]
                = aux_num & 1;
            aux_num = aux_num >> 1;
            i++;
        }
    }

    // Convert binary array to decimal
    for (i = 0; i < len_f; i++)
        num += (1 << i) * a[i];
    return num;
}

// Find nth binary palindrome number 
static int getNthNumber(int n)
{
    int group_no = 0, group_offset;
    int count_upto_group = 0, count_temp = 1;
    int op, aux_num;

    // Find the group where nth element lies
    while (count_temp < n) {
        group_no++;

        count_upto_group = count_temp;
        count_temp += 3 * (1 << (group_no - 1));
    }

    // Offset inside the group
    group_offset = n - count_upto_group - 1;

    // Decide middle bit and auxiliary number 
    if ((group_offset + 1) <= (1 << (group_no - 1))) {
        op = 2;

        aux_num = group_offset;
    }
    else {
        if (((group_offset + 1) - (1 << (group_no - 1)))
                % 2
            == 1)
            op = 0;
        else
            op = 1;

        aux_num
            = (group_offset - (1 << (group_no - 1)))
              / 2;
    }

    return constructNthNumber(group_no, aux_num, op);
}

public static void Main(String[] args)
{
    int n = 9;
  
    Console.Write("{0}", getNthNumber(n));
}

}

JavaScript

var INT_SIZE = 32;

// Construct the nth binary palindrome using // group number, auxiliary number and operation type function constructNthNumber(group_no , aux_num,op) { var a = Array.from({length: INT_SIZE}, () => 0);

var num = 0, len_f=0;
var i = 0;

// No middle bit
if (op == 2) 
{
    
    // Final length
    len_f = 2 * group_no;

    // Set first and last bit
    a[len_f - 1] = a[0] = 1;

    // Fill bits symmetrically from middle
    while (aux_num > 0) 
    {
        a[group_no + i] 
            = a[group_no - 1 - i]
            = aux_num & 1;
        aux_num = aux_num >> 1;
        i++;
    }
}

// Insert 0 in middle
else if (op == 0) 
{
    
    // Final length
    len_f = 2 * group_no + 1;

    // Set first, last and middle bit
    a[len_f - 1] = a[0] = 1;
    a[group_no] = 0;

    // Fill remaining bits symmetrically
    while (aux_num > 0) 
    {
        a[group_no + 1 + i] 
            = a[group_no - 1 - i]
            = aux_num & 1;
        aux_num = aux_num >> 1;
        i++;
    }
}

// Insert 1 in middle
else 
{
    
    // Final length
    len_f = 2 * group_no + 1;

    // Set first, last and middle bit
    a[len_f - 1] = a[0] = 1;
    a[group_no] = 1;

    // Fill remaining bits symmetrically
    while (aux_num > 0)
    {
        a[group_no + 1 + i] 
            = a[group_no - 1 - i]
            = aux_num & 1;
        aux_num = aux_num >> 1;
        i++;
    }
}

// Convert binary array to decimal 
for(i = 0; i < len_f; i++)
    num += (1 << i) * a[i];
    
return num;

}

// Find nth binary palindrome number function getNthNumber(n) { var group_no = 0, group_offset; var count_upto_group = 0, count_temp = 1; var op, aux_num;

// Find the group where nth element lies
while (count_temp < n) 
{
    group_no++;

    count_upto_group = count_temp;
    count_temp += 3 * (1 << (group_no - 1));
}

// Offset inside the group
group_offset = n - count_upto_group - 1;

// Decide middle bit and auxiliary number
if ((group_offset + 1) <= (1 << (group_no - 1)))
{
    op = 2; 

    aux_num = group_offset;
}
else
{
    if (((group_offset + 1) - 
       (1 << (group_no - 1))) % 2 == 1)
        op = 0; 
    else
        op = 1; 

    aux_num = ((group_offset) -  
         (1 << (group_no - 1))) / 2;
}
return constructNthNumber(group_no, aux_num, op);

}

// Driver code var n = 9;

console.log(getNthNumber(n));

`