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))fori > 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.
Example 1:
Input: n = 3, k = 1 Output: "0" Explanation: S3 is "0111001". The 1st bit is "0".
Example 2:
Input: n = 4, k = 11 Output: "1" Explanation: S4 is "011100110110001". The 11th bit is "1".
Constraints:
1 <= n <= 201 <= k <= 2n - 1
Approach 01:
-
C++
-
Python
#include <cmath>
class Solution {
public:
char findKthBit(int n, int k) {
if (n == 1)
return '0';
const int midIndex = pow(2, n - 1); // 1-indexed
if (k == midIndex)
return '1';
if (k < midIndex)
return findKthBit(n - 1, k);
return findKthBit(n - 1, midIndex * 2 - k) == '0' ? '1' : '0';
}
};
class Solution:
def findKthBit(self, n: int, k: int) -> str:
if n == 1:
return '0'
midIndex = 2 ** (n - 1) # 1-indexed
if k == midIndex:
return '1'
if k < midIndex:
return self.findKthBit(n - 1, k)
return '1' if self.findKthBit(n - 1, midIndex * 2 - k) == '0' else '0'
Time Complexity
-
Recursive Calls:
The function makes recursive calls based on the value of
n. Specifically, each call reducesnby 1 until it reaches 1. Therefore, the number of recursive calls is proportional ton. -
Overall Time Complexity:
Thus, the overall time complexity is \(O(n)\).
Space Complexity
-
Call Stack:
The maximum depth of the recursion stack is
n, as the function can be calledntimes before reaching the base case. Therefore, the space complexity due to the recursion call stack is \(O(n)\). -
Overall Space Complexity:
The overall space complexity is \(O(n)\).