📜  要添加到 N 的最小数字,使其不包含数字 D(1)

📅  最后修改于: 2023-12-03 15:27:54.472000             🧑  作者: Mango

题目描述

有一个正整数 N 和一个非负整数 D( D 是一位数字),你需要找出一个最小的正整数 M,使得 M 大于等于 N,并且 M 中不包含数字 D。

思路

  1. 构造从 N+1 开始的数列,不断进行判断,直到找到第一个满足要求的数。
  2. 对于每个数,均需要验证其是否满足不含数字 D。
  3. 构造判断函数,通过字符串判断。

代码实现

def add_to_get_minimal_number(n,d):
    """
    :type n: int
    :type d: int
    :rtype: int
    """
    def contains_d(num, d):
        """
        :type n: int
        :type d: int
        :rtype: bool
        """
        if d == 0 and num == 0: # 特殊情况,0 包含 0
            return True
        while num > 0:
            if num % 10 == d:
                return True
            num //= 10
        return False

    while contains_d(n, d): # 判断 n 是否包含数字 D
        n += 1
    return n

性能分析

题目要求最小的满足条件的正整数,因此需要从 N+1 开始构造数列。最坏情况下,需要构造的数列长度是从 N+1 到下一个不包含数字 D 的数。因此,时间复杂度最坏是 O(n),但是实际上大部分情况下都会比较快。

在空间复杂度上,只需要常数级别的额外空间,因此不会造成大的空间开销。

总结

该题是典型的数学技巧题目,需要通过构造数列,不断判断,以找到满足条件的最小正整数。