题目

给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。

注意:
num 的长度小于 10002 且 ≥ k。
num 不会包含任何前导零。

示例 1 :
输入: num = "1432219", k = 3
输出: "1219"
解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
示例 2 :
输入: num = "10200", k = 1
输出: "200"
解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
示例 3 :
输入: num = "10", k = 2
输出: "0"
解释: 从原数字移除所有的数字,剩余为空就是0。

来源:力扣(LeetCode)
链接:原题链接

实现思路

贪心规律:从高位向低位遍历,如果对应的数字>下一位数字,则把该位去掉得到的数字最小。

相邻位进行比较,两者小的进栈

(这里需要注意存在零的情况。举例,“10234” ,0比1小,1出栈,0入栈,此时如果0位于栈底,最后弹出显示则0位于首位,这是错误的)

栈顶弹出条件是:

  1. 栈非空,
  2. k大于0,
  3. 栈顶元素>后面的元素

接下来如果不是0,则可以直接进栈。
如果是0,需要考虑之前的栈非空
这里结合为一句代码:

 if(number!=0||!v.empty())v.push_back(number);   //使用vector实现栈的思想

核心代码

 for(size_t i=0;i<num.size();++i){number=num[i]-'0';//转换为数字while(k>0&&!v.empty()&&v.back()>number)//弹出栈顶的条件{v.pop_back();//使用vector模拟栈,这里弹出k--;//需要减掉的元素数少1}if(number!=0||!v.empty())v.push_back(number);           }

AC代码

class Solution {public:string removeKdigits(string num, int k) {vector<int> v;//模拟栈的思想string result="";int number;for(size_t i=0;i<num.size();++i){number=num[i]-'0';//转换为数字while(k>0&&!v.empty()&&v.back()>number)//弹出栈顶的条件{v.pop_back();k--;}if(number!=0||!v.empty())v.push_back(number);           }while(k>0&&!v.empty()){k--;v.pop_back();}//数字转换为字符串for(size_t i=0;i<v.size();++i){result.append(1,v[i]+'0');}if(result=="")//空串return "0";return result;}
};

未考虑到0的情况的代码

问题出现在出现前导0,如下是问题代码

  while(k>0&&!v.empty()&&v.back()>number)//弹出栈顶的条件{v.pop_back();k--;}if(number==0){//已知没有前导0v.push_back(number);}else//直接入栈v.push_back(number);}

总结

后续整体添加。也可能遗忘。

数字转换为字符串
使用字符串result的append()函数追加字符
append()函数请参考:博客:C++append()函数的功能
数字转化为字符通过num+'0’

  //数字转换为字符串for(size_t i=0;i<v.size();++i){result.append(1,v[i]+'0');}

字符串转化为数字:

这个使用较多,比较简单
字符串转化为数字通过 num-'0’

//一位一位的转换for(size_t i=0;i<num.size();++i){number=num[i]-'0';//转换为数字//后续处理...}

希望对你有帮助。

Leetcode402 remove-k-digits贪心+vector模拟栈的思想相关推荐

  1. [LeetCode] 402. Remove K Digits Java

    题目: Given a non-negative integer num represented as a string, remove k digits from the number so tha ...

  2. LeetCode Remove K Digits

    原题链接在这里:https://leetcode.com/problems/remove-k-digits/description/ 题目: Given a non-negative integer  ...

  3. 贪心:remove K digits移除K个数字

    问题描述: 已知一个使用字符串表示的非负整数num,将num中的k个数字移 除,求移除k个数字后,可以获得的最小的可能的新数字. 例如:num = "1432219" , k = ...

  4. leetcode 402. Remove K Digits | 402. 移掉 K 位数字(单调栈)

    题目 https://leetcode.com/problems/remove-k-digits/ 题解 本题考察对问题的抽象能力,多写几个例子可以发现,这是一个单调栈问题,维护一个单调不减栈. cl ...

  5. leetcode算法题--Remove K Digits

    原题链接:https://leetcode.com/problems/remove-k-digits/ string removeKdigits(string num, int k) {string ...

  6. LeetCode-Remove K Digits

    题目 Remove K Digits Given a non-negative integer num represented as a string, remove k digits from th ...

  7. zjnu 1744 EKSPLOZIJA(模拟栈)

    EKSPLOZIJA Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45   Accepted: 12 Descriptio ...

  8. c语言栈的实现以及操作_python模拟栈的操作实现非递归方式的快速排序算法

    本文首发地址: https://yishuihancheng.blog.csdn.net/article/details/76185032 欢迎关注我的博客[Together_CZ],我是沂水寒城! ...

  9. SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...

最新文章

  1. 田渊栋的2021年终总结:多读历史!历史就是一个大规模强化学习训练集
  2. swiper4自动轮播切换手动触碰后停止踩坑——属性disableOnInteraction
  3. 管与c++中容量的重新分配问题
  4. 听说”双11”是这么解决线上bug的
  5. hibernate.cfg.xml hibernate 配置文件模板
  6. Transfer Execute Redirect重定向方法介绍
  7. php 记录报错,php报错自己记录
  8. go实现本地文件搜索引擎
  9. 微服务架构的核心要点和实现原理解析
  10. Portal widget 插入 widget
  11. day6面向对象--继承、多态
  12. 多步骤查询的解决方案
  13. java 单例 初始化_单例数据库对象启动时参数化初始化?
  14. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第1节 基础加强_4_Junit_@Before@After...
  15. (2)Linux环境下安装和使用Redis
  16. JavaSE JDK搭建
  17. 计算机怎么算对数的反函数,Excel 计算对数分布函数反函数:LOGINV函数
  18. 主成分分析法的SPSS操作
  19. 微软OneDrive使用体验
  20. 浅析淘宝数据魔方技术架构

热门文章

  1. Server Error in '/' Application. 报错
  2. php插入代码数据库
  3. [转]深入理解 __doPostBack
  4. VC中使用全局变量的2种办法及防错措施
  5. python 数据库表结构转为类_Python数据科学实践 | 数据库1
  6. 【统计学习方法】决策树
  7. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第8章-Lurie 型动态网络自适应牵制控制
  8. STM32 基础系列教程 19 – WWDG
  9. Android学习笔记:Activity-ListView
  10. 【发布】温度监测报警器v1.1a内测版!