给你一个下标从 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
不含任何前导零
问题简要描述:返回最少操作
细节阐述:
- 在之前找到 0 的情况下,如果当前数字 num[i] 是 0 或者 5,则立刻返回 n−i−2。
- 在之前找到 5 的情况下,如果当前数字 num[i] 是 2 或者 7,则立刻返回 n−i−2。
Java
class Solution {
public int minimumOperations(String num) {
boolean found0 = false, found5 = false;
int n = num.length();
for (int i = n - 1; i >= 0; i--) {
char c = num.charAt(i);
if (found0 && (c == '0' || c == '5') ||
found5 && (c == '2' || c == '7')) {
return n - i - 2;
}
if (c == '0') {
found0 = true;
} else if (c == '5') {
found5 = true;
}
}
return found0 ? n - 1 : n;
}
}
Python3
class Solution:
def minimumOperations(self, num: str) -> int:
found0 = found5 = False
n = len(num)
for i in range(n - 1, -1, -1):
c = num[i]
if found0 and c in "05" or found5 and c in "27":
return n - i - 2
if c == '0':
found0 = True
elif c == '5':
found5 = True
return n - found0
TypeScript
function minimumOperations(num: string): number {
let n = num.length;
let [found0, found5] = [false, false];
for (let i = n - 1; i >= 0; i--) {
let c = num[i];
if (found0 && (c == '0' || c == '5') ||
found5 && (c == '2' || c == '7')) {
return n - i - 2;
}
if (c == '0') {
found0 = true;
} else if (c == '5') {
found5 = true;
}
}
return found0 ? n - 1 : n;
};
C++
class Solution {
public:
int minimumOperations(string num) {
int n = num.size();
bool found0 = false, found5 = false;
for (int i = n - 1;i >= 0;i--) {
char c = num[i];
if (found0 && (c == '0' || c == '5') ||
found5 && (c == '2' || c == '7')) {
return n - i - 2;
}
if (c == '0') {
found0 = true;
}else if (c == '5') {
found5 = true;
}
}
return n - found0;
}
};
Go
func minimumOperations(num string) int {
n := len(num)
var found0, found5 bool
for i := n - 1; i >= 0; i-- {
c := num[i]
if found0 && (c == '0' || c == '5') ||
found5 && (c == '2' || c == '7') {
return n - i - 2
}
if c == '0' {
found0 = true
} else if c == '5' {
found5 = true
}
}
if found0 {
return n - 1
}
return n
}