1545. 找到第 N 个二进制字符串中的第 K 位

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

给定正整数 n 和 k,生成二进制字符串 Sn:S1 = '0',Si = Si-1 + '1' + reverse(invert(Si-1))。目标是找到 Sn 的第 k 位。通过递归方法,若 k 在前半部分,递归查找;若在中间,返回 '1';若在后半部分,映射到前半部分并翻转结果。时间和空间复杂度均为 O(n)。

🎯

关键要点

  • 给定正整数 n 和 k,生成二进制字符串 Sn。
  • S1 = '0',Si = Si-1 + '1' + reverse(invert(Si-1))。
  • 目标是找到 Sn 的第 k 位。
  • 通过递归方法查找 k 位:如果 k 在前半部分,递归查找;如果在中间,返回 '1';如果在后半部分,映射到前半部分并翻转结果。
  • Si 的长度为 2^i - 1,且中间位总是 '1'。
  • 时间和空间复杂度均为 O(n)。
  • 递归步骤包括计算中间索引,如果 k 小于中间索引,则在前半部分查找;如果 k 大于中间索引,则在反转的后半部分查找并翻转结果。
  • 通过递归和字符串构造的性质,避免生成整个字符串,提高效率。
➡️

继续阅读