判断两个不完整数字的大小 | 豆包MarsCode AI 刷题

55 阅读3分钟

image.png

题目描述

小M得到了两个长度为K的整数XY,其中某些数字是缺失的(用?表示)。现在他想知道是否可以肯定地说X严格大于Y。如果答案是肯定的,返回1;否则返回0

请注意,XY中都不能有前导0,即任何一方的数字不能以0开头。

解题思路

  1. 遍历字符串:我们需要逐个比较 X 和 Y 中的字符。
  2. 处理缺失字符:如果遇到 ?,需要考虑所有可能的数字(0-9),并判断是否存在一种情况使得 X 严格大于 Y
  3. 前导零检查:确保 X 和 Y 中没有前导零。

关键步骤

  1. 遍历字符串

    • 使用 for 循环遍历 X 和 Y 的每个字符。
    • 对于每个字符,进行比较。
  2. 处理缺失字符

    • 两个字符都是 ?

      • 如果两个字符都是 ?,则无法确定大小关系,直接返回 0
    • 只有 X[i] 是 ?

      • 如果 Y[i] 是 0,则 X[i] 可以是 1-9,返回 1
      • 如果 Y[i] 不是 0,则无法确定 X[i] 是否能大于 Y[i],返回 0
    • 只有 Y[i] 是 ?

      • 如果 X[i] 是 9,则 Y[i] 可以是 0-8,返回 0
      • 如果 X[i] 不是 9,则 Y[i] 可以是 0-8,返回 1
  3. 前导零检查

    • 确保 X 和 Y 中没有前导零。

代码实现

    # 遍历字符串的每个字符
    #还需考虑为1
    for i in range(K):
        if X[i] == '?' or Y[i] == '?':
            if Y[i] == 1:
                continue
            return 0            
        else:
            if X[i] == Y[i]:
                continue
            elif X[i] > Y[i]:
                return 1 
            else:
                return 0 
    return 0              

详细步骤解析

  1. 遍历字符串

    • 使用 for 循环遍历 X 和 Y 的每个字符。
    • 对于每个字符,进行比较。
  2. 处理缺失字符

    • 两个字符都是 ?

      • 如果两个字符都是 ?,则无法确定大小关系,直接返回 0
    • 只有 X[i] 是 ?

      • 如果 Y[i] 是 0,则 X[i] 可以是 1-9,返回 1
      • 如果 Y[i] 不是 0,则无法确定 X[i] 是否能大于 Y[i],返回 0
    • 只有 Y[i] 是 ?

      • 如果 X[i] 是 9,则 Y[i] 可以是 0-8,返回 0
      • 如果 X[i] 不是 9,则 Y[i] 可以是 0-8,返回 1
  3. 前导零检查

    • 确保 X 和 Y 中没有前导零。

总结

  • 遍历字符串:逐个比较 X 和 Y 中的字符。
  • 处理缺失字符:考虑所有可能的数字(0-9),并判断是否存在一种情况使得 X 严格大于 Y
  • 前导零检查:确保 X 和 Y 中没有前导零。

通过这些步骤,我们可以有效地解决这个问题,并确保代码的正确性和效率。 我们能够有效地减少不必要的循环和检查,从而提高代码的效率。这种方法不仅适用于当前的问题,还可以推广到其他需要预计算和快速查找的场景中。


希望这篇笔记对你理解这道题有所帮助! 让我们在青训营学习中中共同交流学习和进步!