【康复学习--LeetCode每日一题】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 位数字。

提示

1 <= num.length <= 100

num 仅由数字 '0' 到 '9' 组成

num 不含任何前导零

思路:

枚举,查看是否能把字符串删除成末尾为 0、00、25、50、75。

代码:

java 复制代码
class Solution {
    // 枚举 
    // 查看是否能把字符串删除成末尾为 0、00、25、50、75
    public int minimumOperations(String num) {
        int ans = num.length() - (num.contains("0") ? 1 : 0);
        return get_min(ans, f(num, "00"), f(num, "25"), f(num, "50"), f(num, "75"));
    }

    int f(String num,String tmp){
        int n = num.length();
        int i = num.lastIndexOf(tmp.charAt(1));
        if(i <= 0){
            return n;
        }
        i = num.lastIndexOf(tmp.charAt(0), i - 1);
        return i < 0 ? n : n - i - 2;
    }

    int get_min(int x, int... y){
        for(int k : y){
            x = Math.min(x,k);
        }
        return x;
    }
}
相关推荐
天天开心(∩_∩)33 分钟前
代码随想录算法训练营第三十九天
算法
Hello小赵39 分钟前
嵌入式硬件学习(十)—— LED驱动+杂项设备驱动
嵌入式硬件·学习
W.KN1 小时前
Servlet 学习笔记
笔记·学习·servlet
weisian1511 小时前
力扣经典算法篇-41-旋转图像(辅助数组法,原地旋转法)
算法·leetcode·职场和发展
Nan_Shu_6141 小时前
学习:入门uniapp Vue3组合式API版本(17)
前端·vue.js·学习·uni-app
hunteritself2 小时前
DeepSeek 论文夺冠,智谱开源 GLM-4.5,OpenAI 学习模式上线!| AI Weekly 7.28-8.3
人工智能·学习·chatgpt·开源·bug·powerpoint
Dymc2 小时前
【计算机视觉与代码大模型全景解析:从理论基础到学习路线】
人工智能·学习·计算机视觉
lingggggaaaa2 小时前
小迪安全v2023学习笔记(五十讲)—— 持续更新中
笔记·学习·安全·web安全·网络安全
朝朝又沐沐2 小时前
算法竞赛阶段二-数据结构(40)数据结构栈的STL
开发语言·数据结构·c++·算法
2501_927773072 小时前
数据结构——单向链表
数据结构·算法