力扣361周赛 2844.生成特殊数字的最少操作步数

4 篇文章 0 订阅
2 篇文章 0 订阅

题目链接

题目描述

思路分析

代码演示

1、题目链接

2844. 生成特殊数字的最少操作 - 力扣(LeetCode)

2、题目描述

 

3、思路分析

要想变成25的倍数,他有规律,就是最后两个数是25 的倍数,也就是00,25,50,75

也就是判断当栈不为空且个数为1时,如果它的栈顶是 0,则要判断后面是否出现了 0 , 5

如果出现了直接返回 (长度-i-2) 原因是他以及前面的都不用删除,再加上它后面的0

如果栈顶为 5 ,则要判断是否出现了 2 , 7。如果出现了也是直接返回 (长度-i-2),

但是注意如果 0 出现在 5 的后面,并且在 2 ,7的前面 ,相当于2···0···5;则要将0 加入到栈中,

然后在栈不为空且数量为2时 ,判断后面是否出现 0 , 2, 5, 7;返回 (长度-i-2)

最后判断字符串中是否包含‘0’,如果是,返回 (长度-1)

不是,返回 (长度)

兄弟们,字符串的方法用起来

4、代码演示

class Solution {
    public int minimumOperations(String num) {
          Stack<Character> s=new Stack<>();
          int n=num.length();
          for(int i=n-1;i>=0;i--){
              char t=num.charAt(i);
               if(!s.empty()){
                   if(s.size()==1){
                      if(s.peek()=='0'){
                     if(t=='0'||t=='5')
                     return n-i-2;
                  }else if(s.peek()=='5'){
                      if(t=='2'||t=='7'){
                           return n-i-2;
                      }else if(t=='0'){
                          s.push(t);
                      }
                  }
                }else{
                    if(t=='0'||t=='5'||t=='2'||t=='7')
                    return n-i-2;
                }
                  
              }
               else if(t=='0'||t=='5'){
                  s.push(t);
              }
          }
          boolean flag=num.contains("0");
          if(flag==true)
          return n-1;
         return n;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值