如何判断一个整数是否出现在另一个整数中并返回最左出现位置
整数子序列匹配(返回最左出现位置)实现方案
规则说明:给定两个整数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
相关产品推荐
相关产品推荐

