You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断一个整数是否出现在另一个整数中并返回最左出现位置

整数子序列匹配(返回最左出现位置)实现方案

规则说明:给定两个整数A、B,定位A作为数字序列在B中最左侧的出现位置,位置从0开始计数,未匹配到返回-1,示例如下:

  • 53出现在1953786的第2位,返回2
  • 78出现在1953786的第4位(最左位置)
  • 57未出现在153786中,返回-1

方法1:字符串匹配法

  • 实现逻辑:将两个整数转为字符串后调用内置子串查找接口,是开发中最常用的实现方案,逻辑简单不易出错。如果需求涉及负数,可自行约定是否匹配符号位。
  • 代码示例(Python):
def find_num_position(a: int, b: int) -> int:
    # 如需忽略符号,可改为 str(abs(a)) 和 str(abs(b))
    str_a = str(a)
    str_b = str(b)
    return str_b.find(str_a)
  • 测试验证:
    • find_num_position(53, 1953786) 返回 2,符合示例要求
    • find_num_position(78, 1953786) 返回 4,为最左侧匹配位置
    • find_num_position(57, 153786) 返回 -1,表示未匹配

方法2:纯数学计算法(无需转字符串)

  • 实现逻辑:先计算A的位数n,逐次截取B末尾的n位和A比较,匹配成功则记录对应位置,遍历完成后返回最左的匹配位置即可。
  • 代码示例(Python):
def find_num_position_math(a: int, b: int) -> int:
    # 计算A的位数
    if a == 0:
        a_digits = 1
    else:
        a_digits = 0
        temp_a = abs(a)
        while temp_a > 0:
            a_digits += 1
            temp_a = temp_a // 10
    mod = 10 ** a_digits
    temp_b = abs(b)
    # 计算B的总位数
    b_digits = 0
    temp = temp_b
    while temp > 0:
        b_digits += 1
        temp = temp // 10
    result = -1
    current_pos = 0
    while temp_b >= (10 ** (a_digits - 1)):
        last_n = temp_b % mod
        if last_n == abs(a):
            # 转换为从左数的位置
            result = b_digits - current_pos - a_digits
        temp_b = temp_b // 10
        current_pos += 1
    return result
  • 适用场景:嵌入式开发、性能要求极高的场景,不需要额外的字符串内存开销。

内容的提问来源于stack exchange,提问作者SE.Edward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:09:01