给你一个下标从 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 位数字。
提示
·1 <= num.length <= 100
·num
仅由数字 '0'
到 '9'
组成
·num
不含任何前导零
题目大意:计算使num可被25整除需要删除的数字的最少个数。
分析:按照题意进行模拟即可,计算使num末尾为"00"或"50"或"25"或"75"所需要删除的数字的最少个数。若不存在上述删除方案但num中有0,则只需删除num.size()-1个数字即可,若不存在上述删除方案且num中没有0,则需要删除所有数字,返回num.size()。
class Solution {
public:
int minimumOperations(string num) {
int N=num.size();
bool has0=false,has5=false;
for(int i=N-1;i>=0;--i){
switch(num[i]){
case '0':
case '5':
{
if(has0) return N-i-2;
if(num[i]=='0') has0=true;
else has5=true;
break;
}
case '2':
case '7':
{
if(has5) return N-i-2;
break;
}
default:break;
}
}
return has0? N-1:N;
}
};
标签:25,Medium,num,数字,删除,2844,最少,整除
From: https://blog.csdn.net/m0_60444839/article/details/140682748