Skip to content

Latest commit

 

History

History
 
 

1545. Find Kth Bit in Nth Binary String

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Given two positive integers n and k, the binary string  Sn is formed as follows:

  • S1 = "0"
  • Si = Si-1 + "1" + reverse(invert(Si-1)) for i > 1

Where + denotes the concatenation operation, reverse(x) returns the reversed string x, and invert(x) inverts all the bits in x (0 changes to 1 and 1 changes to 0).

For example, the first 4 strings in the above sequence are:

  • S= "0"
  • S= "011"
  • S= "0111001"
  • S4 = "011100110110001"

Return the kth bit in Sn. It is guaranteed that k is valid for the given n.

 

Example 1:

Input: n = 3, k = 1
Output: "0"
Explanation: S3 is "0111001". The first bit is "0".

Example 2:

Input: n = 4, k = 11
Output: "1"
Explanation: S4 is "011100110110001". The 11th bit is "1".

Example 3:

Input: n = 1, k = 1
Output: "0"

Example 4:

Input: n = 2, k = 3
Output: "1"

 

Constraints:

  • 1 <= n <= 20
  • 1 <= k <= 2n - 1

Related Topics:
String

Solution 1. Recursion

The length of the string len is 2^n - 1.

If k - 1 == len / 2, then this is the middle of the string, return 1 unless n == 1.

If k - 1 < len / 2, this is at the left part of Sn, which is the same as findKthBit(n - 1, k).

If k - 1 > len / 2, this is the i = k - 1 - len / 2-th bit in the right part, which is the invert of findKthBit(n - 1, len / 2 - i + 1).

// OJ: https://leetcode.com/problems/find-kth-bit-in-nth-binary-string/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(N)
class Solution {
public:
    char findKthBit(int n, int k) {
        if (n == 1) return '0';
        int len = pow(2, n) - 1;
        if (k - 1 == len / 2) return '1';
        if (k - 1 < len / 2) return findKthBit(n - 1, k);
        int i = k - 1 - len / 2;
        return findKthBit(n - 1, len / 2 - i + 1) == '0' ? '1' : '0';
    }
};