📅  最后修改于: 2023-12-03 15:27:54.472000             🧑  作者: Mango
有一个正整数 N 和一个非负整数 D( D 是一位数字),你需要找出一个最小的正整数 M,使得 M 大于等于 N,并且 M 中不包含数字 D。
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),但是实际上大部分情况下都会比较快。
在空间复杂度上,只需要常数级别的额外空间,因此不会造成大的空间开销。
该题是典型的数学技巧题目,需要通过构造数列,不断判断,以找到满足条件的最小正整数。