402. Remove K Digits
(English version is after the code part)
这个题做起来比看起来容易,然后我也没仔细想,先速度刷完,以后再看有没有改进。
用这个来说:
1 2 4 3 2 2 1 9
去掉1位的话,应该去掉4,得到 1 2 3 2 2 1 9
去掉2位的话,在刚才的基础上,去掉3,得到1 2 2 2 1 9.
显而易见,每次找第一个最大值。上面的例子,第一次找到的是4,第二次是3,下一个数开始变小就不找了,所以找不到最后的9.
然后就各种特殊情况。
首先例子已经给了一个提示: "10200", k = 1
第一位之后如果是0,就要去掉第一位和后面所有的0)。
还有特殊情况,比如相等: "122211" "122231"
前者在相等之后,出现一个小的 1,所以去掉相等的其中一个。
后者在相等之后,出现一个大的 3,所以去掉3.
可以在出现等于的时候就记住第一个相等元素的index,以便最后出现一个小的,直接去掉INDEX的元素就行了。
也可以不用记,因为最终搜索停止前者停在最后1个2,后者停在3,正好是要去掉的元素。但是这里牵扯一个问题,就是搜索到底,12222或者12345这样的情况,要去掉最后一个。
剩下的就是一步能判断的情况,比如k = num.length, 最后是空字符就返还0之类的。
代码就按部就班写的,AC之后再没管,过两天数据多了再改进,求不喷。
public class Solution {
public String removeKdigits(String num, int k)
{
if(k == 0 || num.length() == 0) return num;
if(k == num.length()) return "0";
for(int i = 0; i < k;i++)
{
int j = 0;
if(j+1 < num.length() && num.charAt(j+1) == '0') num = num.substring(2);
else
{
boolean finish = false;
j = 0;
while(j+1 < num.length())
{
if(num.charAt(j) <= num.charAt(j+1)) j++;
else
{
finish = true;
num = num.substring(0,j) + num.substring(j+1);
break;
}
}
if(!finish) num = num.substring(0,num.length()-1);
}
int z = 0;
while(z < num.length() && num.charAt(z) == '0') z++;
num = num.substring(z);
}
if(num.length() == 0) return "0";
return num;
}
}
See this eg below:
1 2 4 3 2 2 1 9
When k = 1, meaning get rid of 1 digit, then we shall remove element 4, and get a result
1 2 3 2 2 1 9
When k = 2,based on previous step, we remove 3, and get
1 2 2 2 1 9
The rule is every time we wanna remove an element, we search from index 0, find the first local max value. And that's it.
The rest are just edge cases. Examples in description alredy provided 2 for us.
When the first digit is following by several 0s, we shall remove the first digit and all the following 0s.
num.length == k, return "0"
When searching for a local max value, we move on if 2 neighbor elements are the same, and decide later.
If an empty string left, return "0".
Just an acceptable version.
402. Remove K Digits的更多相关文章
- leetcode 402. Remove K Digits 、321. Create Maximum Number
402. Remove K Digits https://www.cnblogs.com/grandyang/p/5883736.html https://blog.csdn.net/fuxuemin ...
- 【LeetCode】402. Remove K Digits 解题报告(Python)
[LeetCode]402. Remove K Digits 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...
- [LeetCode] 402. Remove K Digits 去掉K位数字
Given a non-negative integer num represented as a string, remove k digits from the number so that th ...
- leetcode 402. Remove K Digits
Given a non-negative integer num represented as a string, remove k digits from the number so that th ...
- 402. Remove K Digits/738.Monotone Increasing Digits/321. Create Maximum Number
Given a non-negative integer num represented as a string, remove k digits from the number so that th ...
- 402 Remove K Digits 移掉K位数字
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小.注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零.示例 1 :输入: ...
- 【leetcode】402. Remove K Digits
题目如下: 解题思路:我的方法是从头开始遍历num,对于任意一个num[i],在[i+1~len(num)-1]区间内找出离num[i]最近并且小于num[i]的数num[j],如果j-i <= ...
- [LeetCode] Remove K Digits 去掉K位数字
Given a non-negative integer num represented as a string, remove k digits from the number so that th ...
- Leetcode: Remove K Digits
Given a non-negative integer num represented as a string, remove k digits from the number so that th ...
随机推荐
- C++专题 - 面向对象总结
1. 什么是类?什么是对象?对象与类的关系是什么? 答:类就是相同的数据和相同的一组对象的集合,即类是对具有相同数据结构和相同操作的一类对象的描述: 对象是描述其属性的数据以及对这些数 ...
- CSS3实用方法小记 2016.03.16
圆角边框: border-radius : 4px; box阴影: box-shadow : 5px 5px 3px #000 ; /* 参数分别为向右拓展距离,向下拓展距离,阴影宽度,颜色*/ 背景 ...
- phpmailer 发送邮件
<?php /* 可用新浪和网易邮箱测试成功,但QQ不成功! 下载 phpmailer 解压 http://phpmailer.worxware.com/ 要注意邮件服务器的端口号,默认是 25 ...
- 移动端下拉刷新、加载更多插件dropload.js(基于jQuery/Zepto)
移动端下拉刷新.加载更多插件dropload.js(基于jQuery/Zepto) 原文:http://www.grycheng.com/?p=1869 废话不多说,先让大家看一下案例效果: DEMO ...
- Android App的生命周期是什么
怎么说呢 看Android一般指的是 Activity的生命周期, 关于app的生命周期, 有明白的大神请告诉我 上面这张图是 网上搜到的一张关于app生命周期的图, 在我看来, 其实就是一个Acti ...
- thinkphp路径引用问题
查看ThinkPHP\Library\Behavior\ContentReplaceBehavior.class文件,常量定义如下定义: '__ROOT__' => __ROOT__ ...
- 配置nginx支持thinkphp框架
因为nginx本身没有支持pathinfo,所以无法使用thinkphp框架,不过我们可以在配置里进行修改使其能够正常使用thinkphp. 1.修改配置支持pathinfo vi /etc/ngin ...
- QPixmap,QImage图片大小缩放linux版
注意事项: 1.装载图片的地址有时候会读取不到.可以多摸索一下当前系统对应的格式. 2.scaled缩放方式选择 3.注意保存路径.下面程序保存路径是当前执行文件目录中. PicOpera::PicO ...
- Js 简单分页(一)
网上有很多分页的插件 但是没有自己想要的 上代码吧,只有分页部分代码,css 省略了 html <div class="bar2 fr" id="pagecontr ...
- VS2013相关资料
visual studio 主页 http://msdn.microsoft.com/en-us/vstudio/aa718325.aspx vs2013 download http://www.mi ...