-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy path1545-find-kth-bit-in-nth-binary-string.js
48 lines (43 loc) · 1.18 KB
/
1545-find-kth-bit-in-nth-binary-string.js
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
* 1545. Find Kth Bit in Nth Binary String
* https://leetcode.com/problems/find-kth-bit-in-nth-binary-string/
* Difficulty: Medium
*
* 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 four strings in the above sequence are:
* - S1 = "0"
* - S2 = "011"
* - S3 = "0111001"
* - S4 = "011100110110001"
*
* Return the kth bit in Sn. It is guaranteed that k is valid for the given n.
*/
/**
* @param {number} n
* @param {number} k
* @return {character}
*/
var findKthBit = function(n, k) {
let position = k - 1;
let invertCount = 0;
let length = (1 << n) - 1;
while (position !== 0) {
const mid = length >> 1;
if (position === mid) {
return invertCount % 2 === 0 ? '1' : '0';
}
if (position > mid) {
position = length - position - 1;
invertCount++;
} else {
length = mid;
}
}
return invertCount % 2 === 0 ? '0' : '1';
};