1、题目来源:选自LeetCode 402:

2、问题描述:

3、问题分析

 

 

  通过分析我们可以得出这样的结论:如果后一个数字比前面的数字小的话,那么我们就要把前面的一个数字删除掉,并且每次把字符串中拆出来的数字push进栈的时候要考虑特殊情况:当栈不为空的时候可以把数字0存进去,反之如果栈为空且数字为0,那么这时候0就不能入栈;如果for循环结束但是K的值依然还是大于0.例如字符串为“12345” k=2就会出现这样的情况,我们就要在删除后面的较大的数字才能符合题意。

4、实现代码:

  public String removeKdigits(String num, int k) {
Stack<Integer> stack=new Stack<Integer>();
Stack<Integer> temp_stack=new Stack<Integer>();
int size=0;
String result="";
//这个循环结束就能把一般情况下需要删除几个数字的情况解决完毕
for(int i=0;i<num.length();i++){
int number=num.charAt(i)-'0';
//当栈不为空、当前的number<栈顶元素、k的值为大于0的情况下,弹出栈顶元素
while(stack.size()!=0&&stack.peek()>number&&k>0){
stack.pop();
k--;
}
//当栈不为空或者将要入栈的number不是0的情况下都可以直接入栈
//(这其实已经包含了很多中情况了)
if(number!=0||stack.size()!=0){
stack.push(number);
}
}
while(stack.size()!=0&&k>0){
stack.pop();
k--;
}
while(stack.size()!=0){
temp_stack.push(stack.pop());
}
size=temp_stack.size();
for(int i=0;i<size;i++){
char temp=(char) (temp_stack.pop()+'0');
result+=temp;
}
if(result==""){
result="0";
}
return result;
}

5、提交运行:

移除K位数字的更多相关文章

  1. LeetCode:移除K位数字【402】

    LeetCode:移除K位数字[402] 题目描述 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. nu ...

  2. Leetcode 402.移掉k位数字

    移调k位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : ...

  3. Java实现 LeetCode 402 移掉K位数字

    402. 移掉K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示 ...

  4. [Swift]LeetCode402. 移掉K位数字 | Remove K Digits

    Given a non-negative integer num represented as a string, remove k digits from the number so that th ...

  5. 402 Remove K Digits 移掉K位数字

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小.注意:    num 的长度小于 10002 且 ≥ k.    num 不会包含任何前导零.示例 1 :输入: ...

  6. 402. 移掉K位数字

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k.num 不会包含任何前导零.示例 1 : 输入: num ...

  7. 算法——移掉K位数字使得数值最小

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. leetcode 解题思路:如果这个数的各个位是递增的,那么直接从最后面开始移除一定就是最最小的:如果这个数的 ...

  8. 算法46----移除K位数字

    一.题目:移除K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示 ...

  9. [LeetCode] Remove K Digits 去掉K位数字

    Given a non-negative integer num represented as a string, remove k digits from the number so that th ...

随机推荐

  1. 转:Mac操作技巧 | "键盘侠"必备快捷键

    看到一篇网友整理的比较好的“Mac操作技巧 | "键盘侠"必备快捷键”,转载过来分享给大家!希望能有帮助. 更多专题,可关注小编[磨人的小妖精],查看我的文章,也可上[风云社区 S ...

  2. 老男孩Python全栈学习 S9 日常作业 001

    1.简述变量命名规范 必须以字母.数字.下划线命名,且不能以数字开头 不能是python的关键字 不能以中文或者拼音作为变量名 命名格式推荐以驼峰式或者下划线连接命名 区分大小写 要有意义,具有可描述 ...

  3. SHAREDPOOL使用率的监控部署及思考

    [系统环境]: 系统环境:Sun Solaris10 U11  +  ORACLE  11.2.0.4.0  RAC [背景描述]: 从2016年11月起,生产的数据库期的出现了两次m0001进程12 ...

  4. 选择性搜索(SS)算法

    一.目标检测和目标识别 目标识别(object recognition)是要指明一张图像中包含哪类目标.输入是图像,输出是图像中的目标属于的类别(class probability).目标检测是识别出 ...

  5. vue学习之组件

    组件从注册方式分为全局组件和局部组件. 从功能类型又可以分为偏视图表现的(presentational)和偏逻辑的(动态生成dom),推荐在前者中使用模板,在后者中使用 JSX 或渲染函数动态生成组件 ...

  6. mac office2016

  7. 【easy】206. Reverse Linked List 链表反转

    链表反转,一发成功~ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; ...

  8. Linux 首先基本包安装(vim啊什么的),源,源优化,项目架构介绍, (LNMuWsgi)Django项目相关软件mysql,redies,python(相关模块)安装配置测试

    内容 补充: 查看已启动服务的端口 netstat -tulnp |grep (方式1) ss -tulnp|grep (方式2) 前期铺垫: . Linux要能上网 . 掌握Linux软件包安装方法 ...

  9. HDR拍照

    HDR 拍照:        (High Dynamic Range Imaging)高动态范围成像,是用来实现比普通数字图像技术更大曝光动态范围(即更大的明暗差别)的一组技术.高动态范围成像的目的就 ...

  10. iOS URL Cache文章推荐 (待完成)

    推荐链接是:http://www.cnblogs.com/Mike-zh/archive/2016/02/24/5210169.html http://blog.csdn.net/y550918116 ...