LeetCode:2844. 生成特殊数字的最少操作(贪心 Java)
创始人
2024-11-11 15:06:05

目录

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

题目描述:

实现代码与解析:

贪心

原理思路:


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 不含任何前导零

实现代码与解析:

贪心

class Solution {     public int minimumOperations(String num) {          int res = 0;         // 00 25 50 75          char[] cs = num.toCharArray();         int n = cs.length;          boolean pre0 = false;         boolean pre5 = false;          int cnt0 = 0;          for (int i =  n - 1; i >= 0; i--) {             if (cs[i] == '0') {                  if (pre0) return n - i - 2;                  pre0 = true;                  cnt0++;             }             if (cs[i] == '2') {                 if (pre5) return n - i - 2;             }             if (cs[i] == '5') {                 if (pre0) return n - i - 2;                 pre5 = true;             }             if (cs[i] == '7') {                 if (pre5) return n - i - 2;             }         }          return n - cnt0;     } }

原理思路:

        究极大贪心,能被25整除就那么几种情况,后缀为00, 25, 50, 75的,所以从后向前遍历,判断那种情况先达成即可。

        注意都不达成时,最后就只能为0,返回长度- 0的个数就是要去除的res。

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...