Post

1667 Find Kth Bit In Nth Binary String

1667 Find Kth Bit In Nth Binary String

Find Kth Bit in Nth Binary String image

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

1
2
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 four strings in the above sequence are:

1
2
3
4
S1 = "0"
S2 = "0**1**1"
S3 = "011**1**001"
S4 = "0111001**1**0110001"

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

 

Example 1:

1
2
3
4
5
6
**Input:** n = 3, k = 1
**Output:** "0"
**Explanation:** S3 is "**0**111001".
The 1st bit is "0".

Example 2:

1
2
3
4
5
6
**Input:** n = 4, k = 11
**Output:** "1"
**Explanation:** S4 is "0111001101**1**0001".
The 11th bit is "1".

 

Constraints:

1
2
1 <= n <= 20
1 <= k <= 2n - 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

impl Solution {
    pub fn find_kth_bit(n: i32, k: i32) -> char {
        
        fn test(a : &str, n : i32) -> String {
            if n == 0 {
                return a.to_string();
            }
            let mut b = a.chars().rev().collect::<String>();
            let mut c = String::new();
            for z in b.chars() {
                if z == '1' {
                    c.push('0');
                } else {
                    c.push('1');
                }
            }

            return test(&(a.to_owned() + "1" + &c), n - 1);

        }
        let mut g = "0";
        return test(g, n).chars().nth((k - 1) as usize).unwrap();
    }
}



This post is licensed under CC BY 4.0 by the author.