问题解析
我们需要找到最少的操作次数,使得从数字 n 中删除一位数字后,剩下的数字是 5 的倍数。一个数是 5 的倍数,当且仅当它的最后一位是 0 或 5。因此,我们的任务是删除某些数字后,使剩下的数字以 0 或 5 结尾。目标是通过最少的删除次数,找到符合这个条件的最小操作次数。
解决思路
判断条件: 数字 n 的最后一位必须是 0 或 5,才能成为 5 的倍数。我们要在删除某些数字后,尽量让最后一位满足这个条件。
贪心策略: 为了最小化操作次数,首先寻找离末尾最近的 0 或 5,从该位置往后删除所有其他数字。
特殊情况: 如果没有 0 或 5,那么只能不断删除,直到最后剩下一个数字。
代码实现:
def solution(n):
n_str = str(n)
length = len(n_str)
for i in range(length - 1, -1, -1):
if n_str[i] == '0' or n_str[i] == '5':
return length - i - 1
return length
思路说明:
将数字 n 转换为字符串形式,方便逐位操作。从右往左遍历字符串,寻找第一个出现的 0 或 5。一旦找到符合条件的字符,计算从该字符到末尾的删除次数,并返回该值。如果遍历完整个数字没有找到符合条件的字符,说明该数字没有 0 或 5,此时需要删除所有数字。
总结思考:
这个问题的核心在于从右向左寻找最早出现的 0 或 5,并计算从当前位置到末尾的删除次数。通过这种贪心算法,我们能够快速找到满足条件的最优解。