首页 > 其他分享 >2844. 生成特殊数字的最少操作 Medium

2844. 生成特殊数字的最少操作 Medium

时间:2024-07-25 10:29:13浏览次数:19  
标签:25 Medium num 数字 删除 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 不含任何前导零

题目大意:计算使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

相关文章

  • 28449-2018 测评过程指南小结
    28449测评过程指南适用于测评机构、定级对象的主管部门及运营使用单位对定级对象安全等级保护状况开展安全测试评价等级测评工作要求:(附录C)1依据标准,遵循原则2恰当选取,保证强度3规范行为,规避风险存在的风险:(标准P1和课本108)1.影响系统正常运行2.泄露敏感信息3.......
  • 2101. 引爆最多的炸弹 Medium
    给你一个炸弹列表。一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆。炸弹用一个下标从 0 开始的二维整数数组 bombs 表示,其中 bombs[i]=[xi,yi,ri] 。xi 和 yi 表示第 i 个炸弹的X和Y坐标,ri 表示爆炸范围的 半径 。你需要选择引爆 一个 炸弹。当......
  • 1186. 删除一次得到子数组最大和 Medium
    给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中......
  • 2850. 将石头分散到网格图的最少移动次数 Medium
    给你一个大小为 3*3 ,下标从 0 开始的二维整数矩阵 grid ,分别表示每一个格子里石头的数目。网格图中总共恰好有 9 个石头,一个格子里可能会有 多个 石头。每一次操作中,你可以将一个石头从它当前所在格子移动到一个至少有一条公共边的相邻格子。请你返回每个格子恰......
  • 代码随想录算法训练营第33天 | 贪心4:452. 用最少数量的箭引爆气球、435. 无重叠区间
    代码随想录算法训练营第33天|贪心4:452.用最少数量的箭引爆气球、435.无重叠区间、763.划分字母区间452.用最少数量的箭引爆气球https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/代码随想录https://programmercarl.com/0452.用最......
  • 代码随想录day 31 用最少数量的箭引爆气球 | 无重叠区间 | 划分字母区间
    用最少数量的箭引爆气球用最少数量的箭引爆气球解题思路先根据数组中的第一个参数进行排序,之后通过记录最小右区间来判断是否重叠或者进入下个重叠区。贪心的思想是有重叠就尽可能地进行重叠,从而达到局部最优知识点重叠区间,贪心心得学会了如何判断和找寻重叠区间的方法无......
  • (nice!!!)LeetCode 3085. 成为 K 特殊字符串需要删除的最少字符数(贪心、哈希表、字符串)
    3085.成为K特殊字符串需要删除的最少字符数思路:1、用哈希表mp先统计出字符串word中所有字母出现的次数2、将哈希表里的次数进行升序排序v3、采用贪心的策略,删除最少的字符串,就是保留最大的字符串。可知,最少有一个元素的数量不需要改变。那么我们就枚举这个数量v[i],......
  • (nice!!!)LeetCode 3112. 访问消失节点的最少时间(图论、边的dijkstra、堆优化)
    3112.访问消失节点的最少时间思路:节点n的个数非常大,用普通的dijkstra算法对节点进行枚举是会超时的,时间复杂度为0(n^2)。这里边的数量最大为10^5,可以对边使用dijkstra算法+堆优化操作,时间复杂度为0(mlogm)。节点消失问题,只需要加一个判断条件,判断到每个节点的最小时......
  • Exact Neighbours (Medium)
    官解的方法二就是这篇博客(注意要先将\(a\)从小到大排序),补充一下,博客中说当\(a_j-j+1<0\)时,我们就找第\(j-a_j\)列的那个房子即可我在做的时候,也想到了逐个构造的方法,然而我在构造新的一列时,却总是想让这一列的房子与前一列的房子来配对,事实证明,我们构造的时候不要拘泥于数学归纳......
  • Studying-代码随想录训练营day30| 452.用最少数量的箭引爆气球、435.无重叠区间、763.
    第30天,贪心part04,加油,编程语言:C++目录452.用最少数量的箭引爆气球435.无重叠区间 763.划分字母区间 总结 452.用最少数量的箭引爆气球文档讲解:代码随想录用最少数量的箭引爆气球视频讲解:手撕用最少数量的箭引爆气球题目:学习:根据题干,很直观的贪心逻辑就是尽可......