题目2844.生成特殊数字的最少操作
给你一个下标从 0 开始的字符串 num ,表示一个非负整数。
在一次操作中,您可以选择 num 的任意一位数字并将其删除。请注意,如果你删除 num 中的所有数字,则 num 变为 0。
返回最少需要多少次操作可以使 num 变成特殊数字。
如果整数 x 能被 25 整除,则该整数 x 被认为是特殊数字。
示例 1:
输入:num = "2245047"
输出:2
解释:删除数字 num[5] 和 num[6] ,得到数字 "22450" ,可以被 25 整除。
可以证明要使数字变成特殊数字,最少需要删除 2 位数字。
示例 2:
输入:num = "2908305"
输出:3
解释:删除 num[3]、num[4] 和 num[6] ,得到数字 "2900" ,可以被 25 整除。
可以证明要使数字变成特殊数字,最少需要删除 3 位数字。
示例 3:
输入:num = "10"
输出:1
解释:删除 num[0] ,得到数字 "0" ,可以被 25 整除。
可以证明要使数字变成特殊数字,最少需要删除 1 位数字。
思路:
一个数能被 25 整除,有如下五种情况:
这个数是 0。
这个数的末尾是 00
这个数的末尾是 25
这个数的末尾是 50
这个数的末尾是 75
所以,我们可以从后往前遍历,找到满足这五种情况,并且返回即可
特殊情况:
当找不到满足条件时,我们需要把所有数字都删除,放回数组长度即可
AC代码
cpp
class Solution {
public:
int minimumOperations(string num) {
int n = num.length();
bool find0 = false,find5=false;
for(int i=n-1;i>=0;i--)
{
if(num[i]=='0'||num[i]=='5')
{
if(find0)
{
return n-i-2;
}
if(num[i]=='0')
find0 = true;
else
find5=true;}
else if(num[i]=='2'||num[i]=='7')
{
if(find5)
return n-i-2;
}
}
if(find0)
return n-1;
return n;
}
};