📅  最后修改于: 2023-12-03 15:07:13.544000             🧑  作者: Mango
给定一个非负整数,删除其中的一些数字,使得剩余数字的数位之和为偶数,且删除后的数字不含前导零,返回所有可能的结果中,任意一个是奇数。
输入: 1432219
输出: 143221
解释: 删除一个数字 9,剩余数字 143221 的数位之和为偶数。143221 是一个奇数,且不含前导零。其余结果包括 43221 和 132221 等也是合法的。
注意: 输入的数字保证不超过 $10^5$
本题直接模拟即可。对于一个数,我们可以枚举删去哪个数位,然后计算剩余数字的数位之和是否为偶数,如果是,则记录该值为答案。
def removeDigits(num: int) -> int:
num_str = list(str(num))
for i in range(len(num_str)):
digit = int(num_str[i])
del num_str[i]
if sum(int(d) for d in num_str) % 2 == 0:
return int(''.join(num_str))
num_str.insert(i, str(digit))
return -1 # 如果没有找到符合条件的数,返回 -1
本题的时间复杂度为 $O(n^2)$,其中 $n$ 表示输入的数字的位数。具体来说,枚举数字中的每一个数位需要 $O(n)$ 的时间,而计算剩余数字数位之和的时间为 $O(n)$。