Problem: 1545. 找出第 N 个二进制字符串中的第 K 位-耗时100-Find Kth Bit in Nth Binary String通过观察可以发现算是中间对称字符串最中间的字符一定是1两侧的字符对称相反所以可以使用二分查找的方式每次n–首先k–拿到索引拿到最后一个字符的索引r待求索引k计算中间字符的索引midr/2若mid k则根据k mid的次数cnt来返回值若k mid则需要累加cnt且kr-kn–这里k做了对称变换所以字符相反了需要统计翻转的次数cnt若k mid则n–最后若n2根据cnt的奇偶来返回相应的字符Codeclass Solution { public: char findKthBit(int n, int k) { int r, mid, cnt 0; if(n1) return 0; k--; string tmp 011; while(true) { if(n2) { if((cnt1)0)return tmp[k]; else { if(tmp[k]0) return 1; else return 0; } } r pow(2, n) - 2; mid r/2; if(mid k) { if((cnt1)0) return 1; else return 0; } else if(k mid) { n--; k r - k; cnt; } else n--; } return -; } };
leetcode 1545. 找出第 N 个二进制字符串中的第 K 位-耗时100-Find Kth Bit in Nth Binary String
发布时间:2026/5/24 7:45:06
Problem: 1545. 找出第 N 个二进制字符串中的第 K 位-耗时100-Find Kth Bit in Nth Binary String通过观察可以发现算是中间对称字符串最中间的字符一定是1两侧的字符对称相反所以可以使用二分查找的方式每次n–首先k–拿到索引拿到最后一个字符的索引r待求索引k计算中间字符的索引midr/2若mid k则根据k mid的次数cnt来返回值若k mid则需要累加cnt且kr-kn–这里k做了对称变换所以字符相反了需要统计翻转的次数cnt若k mid则n–最后若n2根据cnt的奇偶来返回相应的字符Codeclass Solution { public: char findKthBit(int n, int k) { int r, mid, cnt 0; if(n1) return 0; k--; string tmp 011; while(true) { if(n2) { if((cnt1)0)return tmp[k]; else { if(tmp[k]0) return 1; else return 0; } } r pow(2, n) - 2; mid r/2; if(mid k) { if((cnt1)0) return 1; else return 0; } else if(k mid) { n--; k r - k; cnt; } else n--; } return -; } };