个人练习-Leetcode-1545. Find Kth Bit in Nth Binary String
创始人
2025-05-30 01:15:12
0

题目链接:https://leetcode.cn/problems/find-kth-bit-in-nth-binary-string/

题目大意:给一个字符串S1=“0”S_1=“0”S1​=“0”,接下来的字符串的递推公式为Si=Si−1+"1"+reverse(invert(Si−1))S_i=S_{i-1}+"1"+reverse(invert(S_{i-1}))Si​=Si−1​+"1"+reverse(invert(Si−1​)),其中reverse()表示将其倒转,invert()表示按位取反。给出n, k,求SnS_nSn​的第k个位。

思路:开始时想着用二进制的位运算,后来感觉数字字符串转来转去太麻烦,搜了搜发现有这个库可以用,但写了之后才发现,bitset的长度要求必须是常量,而本题的字符串的长度是一直在变的。

看了一眼题解,说用递归做,茅塞顿开。首先字符串SnS_nSn​的长度是固定的,先把所有的字符串的长度算出来。由递推公式可以知道它们的长度必然都是奇数。那么我们分成前后两段来看。

长度为len,中间位为mid = len / 2。由递推公式,若在前半段,则结果就是Sn−1S_{n-1}Sn−1​的第k位;若在正中间,就是1;若在后半段,则与Sn−1S_{n-1}Sn−1​的第n-k+1位相反。

    char findBit(int n, int k) {if (n == 1)return '0';int len = lens[n];int mid = len / 2;if (k == mid+1)return '1';else if (k <= mid)return findKthBit(n-1, k);else {if (findKthBit(n-1, len+1-k) == '1')return '0';elsereturn '1';}} 

完整代码

class Solution {
public:vector lens;char findBit(int n, int k) {if (n == 1)return '0';int len = lens[n];int mid = len / 2;if (k == mid+1)return '1';else if (k <= mid)return findKthBit(n-1, k);else {if (findKthBit(n-1, len+1-k) == '1')return '0';elsereturn '1';}} char findKthBit(int n, int k) {lens.resize(n+1, 0);lens[1] = 1;for (int i = 2; i <= n; i++)lens[i] = (lens[i-1]<<1) + 1;return findBit(n, k);}
};

相关内容

热门资讯

律师分出来合作的案件是什么样的... 独立律师生存需要案源,案源大部分掌握在有资源的人身上,而这些人可能不做案件,或者不能做全部的案件。 ...
如何找到最好的刑事律师?赵可律... 刑事犯罪案件的复杂性 刑事犯罪案件往往错综复杂,涉及众多法律条文和程序。不同类型的刑事案件,如盗窃、...
4枚导弹打醒了俄罗斯,普京向北... 当地时间2025年11月19日,俄罗斯国防部通报,当地时间2025年11月18日,乌克兰武装部队发射...
每周股票复盘:碧兴物联(688... 截至2025年11月21日收盘,碧兴物联(688671)报收于21.08元,较上周的24.15元下跌...
比分4比0 射门次数20比0 ... 11月22日,在2026亚足联U17亚洲杯预选赛A组的一场比赛中,U16国足在主场4比0大胜巴林队,...
每周股票复盘:*ST海钦(60... 截至2025年11月21日收盘,*ST海钦(600753)报收于7.92元,较上周的8.0元下跌1....
每周股票复盘:易德龙(6033... 截至2025年11月21日收盘,易德龙(603380)报收于35.04元,较上周的37.1元下跌5....
2026-27赛季亚冠中国球队... 随着中超联赛的落幕,2026-27赛季亚冠联赛中国球队的参赛资格也基本确定。中国足球在不断发展,球队...
原创 中... 日本虽派人登门协商,中方却在会后直言“不满意”,高市早苗焦头烂额之际,外媒开始给日本狂打鸡血,特朗普...
头皮发麻!吃烤肉时从嘴里掉出一... 近日,有市民向广州日报新花城记者反映,在与朋友食用烤肉的过程中,朋友吃着与烤肉搭配的生菜时口里有“诡...