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 ...
随机推荐
- 配置wamp开发环境【2】 配置wamp开发环境之mysql的配置
此前我已经将wamp配置的Apache.PHP.phpmyadmin全部配置完成,以上三种配置参照 配置wamp开发环境 下面我们来看看mysql的配置,这里用的是mysql5.5.20,下载地址: ...
- 如何写类库方法、属性等的注释,才能在其他地方调用dll文件时,在代码里出现智能提示?
我的本意是想整理下以往写过的代码库,给自己的代码增加复用性.一段时间后,可能自己对写过的代码是什么含义会忘掉,或者别人看自己的代码, 增加可懂性的考虑,决定要添加注释.(好像语句不通:)可是发现,在其 ...
- php练习——打印半金字塔、金字塔、空心金字塔、菱形、空心菱形
半金字塔 金字塔 空心金字塔 菱形 空心菱形
- dotnet core开发体验之开始MVC
开始 在上一篇文章:dotnet core多平台开发体验 ,体验了一把dotnet core 之后,现在想对之前做的例子进行改造,想看看加上mvc框架是一种什么样的体验,于是我就要开始诞生今天的这篇文 ...
- smali 语法之try catch语句
# virtual methods .method public onClick(Landroid/view/View;)V .locals 4 .parameter "v" .p ...
- C语言的预处理命令
C语言编译器处理时经过的第一个步骤是预处理,就是从.c文件处理为.i文件.在预处理时编译器做了一些展开替换的处理. 1>头文件展开,即将#include "stdio.h"类 ...
- 关于setCharacterEncoding报错
有时候,代码已搬家,就会报这个错,导致这个错误的原因是: HttpServletResponse存在于servlet-api.jar中, 2.3版本的servlet-api.jar中HttpServl ...
- Contest 20140923 潛行世界 拓撲排序,期望
潜行世界 查看 提交 统计 提问 总时间限制: 10000ms 内存限制: 256000kB 描述 HJA和学弟还在旅游中,这次他们来到了潜行世界.潜行世界是一个N个点M条边的有向无环图.每条路对 ...
- L1、L2范式及稀疏性约束
L1.L2范式及稀疏性约束 假设需要求解的目标函数为: E(x) = f(x) + r(x) 其中f(x)为损失函数,用来评价模型训练损失,必须是任意的可微凸函数,r(x)为规范化约束因子,用来对模型 ...
- Alice's Chance
poj1698:http://poj.org/problem?id=1698 题意:爱丽丝要拍电影,有n部电影,规定爱丽丝每部电影在每个礼拜只有固定的几天可以拍电影,只可以拍前面w个礼拜,并且这部电影 ...