博客
关于我
1545 找出第 N 个二进制字符串中的第 K 位(递归)
阅读量:373 次
发布时间:2019-03-04

本文共 961 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要根据给定的规则生成二进制字符串 Sn,并找到第 k 位的字符。这个问题可以通过递归和镜像方法高效地解决,而无需生成整个字符串。

方法思路

  • 问题分析:

    • 我们生成二进制字符串的规则是:S1 = "0",对于 i > 1,Si = Si-1 + "1" + reverse(invert(Si-1))。
    • 我们需要找到第 k 位的字符,可以是 0 或 1。
  • 关键思路:

    • 中间位置 mid = 1 << (n-1)。如果 k 等于 mid,直接返回 "1"。
    • 如果 k 小于 mid,递归查找前面的字符串。
    • 如果 k 大于 mid,使用镜像方法找到对应的位置,并取反返回结果。
  • 递归方法:

    • 当 k 大于 mid 时,计算左边对应的位置,递归查找并取反结果。
  • 解决代码

    class Solution:    def check(self, c: str):        return "1" if c == "0" else "0"        def findKthBit(self, n: int, k: int) -> str:        if n == 1:            return "0"        mid = 1 << (n - 1)        if k == mid:            return "1"        elif k < mid:            return self.findKthBit(n - 1, k)        else:            pos = (1 << n) - k            return self.check(self.findKthBit(n - 1, pos))

    代码解释

    • check 方法:用于取反字符,0 变为 1,1 变为 0。
    • findKthBit 方法:递归查找第 k 位的字符。
      • 当 n 为 1 时,返回 "0"。
      • 计算中间位置 mid,如果 k 等于 mid,返回 "1"。
      • 如果 k 小于 mid,递归查找前面的字符串。
      • 如果 k 大于 mid,计算对应的左边位置,并递归查找并取反结果。

    这种方法高效且递归,最好时间复杂度为 O(log n),适用于给定的约束条件。

    转载地址:http://vmgr.baihongyu.com/

    你可能感兴趣的文章
    org.tinygroup.serviceprocessor-服务处理器
    查看>>
    org/eclipse/jetty/server/Connector : Unsupported major.minor version 52.0
    查看>>
    org/hibernate/validator/internal/engine
    查看>>
    Orleans框架------基于Actor模型生成分布式Id
    查看>>
    SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
    查看>>
    ORM sqlachemy学习
    查看>>
    Ormlite数据库
    查看>>
    orm总结
    查看>>
    os.environ 没有设置环境变量
    查看>>
    os.path.join、dirname、splitext、split、makedirs、getcwd、listdir、sep等的用法
    查看>>
    os.removexattr 的 Python 文档——‘*‘(星号)参数是什么意思?
    查看>>
    os.system 在 Python 中不起作用
    查看>>
    OS2ATC2017:阿里研究员林昊畅谈操作系统创新与挑战
    查看>>
    OSCACHE介绍
    查看>>
    SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum
    查看>>
    OSChina 周五乱弹 ——吹牛扯淡的耽误你们学习进步了
    查看>>
    SQL--mysql索引
    查看>>
    OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
    查看>>
    OSChina 周日乱弹 —— 2014 年各种奇葩评论集合
    查看>>
    OSChina 技术周刊第十期,每周技术抢先看!
    查看>>