题目简述:去掉给定的数字中的某些数字,使去掉之后的数字能整除25。
思路:这里就要考虑25如何才能被整除了,能整除25的数字,那就是 25、50、75、100,这些了。所以让处理之后的数字的尾数等于上述的即可。
var minimumOperations = function (num) {
let len = num.length
let seenZero = false, seenFive = false
for (let i = len; i >= 0; --i) {
if (seenZero && num[i] === '0') return len - i - 2 // 00
if (seenZero && num[i] === '5') return len - i - 2 // 50
if (seenFive && num[i] === '2') return len - i - 2 // 25
if (seenFive && num[i] === '7') return len - i - 2 // 75
seenZero = num[i] === '0' || seenZero
seenFive = num[i] === '5' || seenFive
}
// 如果尾部没有两位数能满足,那就是寻找 0
// 存在 0,那就去除其他的数字即可
// 不存在,去掉全部的数字
return seenZero ? len - 1 : len
};
这里return的值 len - i - 2
因为是倒着进行遍历的,2就是本身的两个数字的位数。
例如测试用例为123040,那么要去掉3即可,当i指向3的时候,len - 3 - 2 = 6 - 3 - 2 = 1,那么去掉一位数即可,也就是去掉4。len - i就是尾部剩余的位数,再减去两位本身的数字之后就得出最少应该去掉的数字位数。