【leetcode】2844. 生成特殊数字的最少操作

88 阅读1分钟

leetcode-2844.png

题目简述:去掉给定的数字中的某些数字,使去掉之后的数字能整除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就是尾部剩余的位数,再减去两位本身的数字之后就得出最少应该去掉的数字位数。