(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的更多相关文章

  1. 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 ...

  2. 【LeetCode】402. Remove K Digits 解题报告(Python)

    [LeetCode]402. Remove K Digits 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...

  3. [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 ...

  4. leetcode 402. 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/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 ...

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

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

  7. 【leetcode】402. Remove K Digits

    题目如下: 解题思路:我的方法是从头开始遍历num,对于任意一个num[i],在[i+1~len(num)-1]区间内找出离num[i]最近并且小于num[i]的数num[j],如果j-i <= ...

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

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

  9. Leetcode: Remove K Digits

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

随机推荐

  1. Linux 特殊权限位

    特殊权限位 LINUX 基本权限有9位但是还有三位特殊权限. suid s(有x权限) S(没有x权限) 4 在用户权限的第三位 sgid s(有x权限) S(没有x权限) 2 在用户组权限的第三位 ...

  2. LINUX 下mysql数据库导出

    mysqldump -u root -p dbname > db.sql

  3. 大型情感类电视连续剧--Android高德之旅(3)地图交互

    总要说两句 前两篇讲到了地图的基础显示和地图类型,今天来记录下高德地图交互相关的设置.地图的绘制分很多层,层级的显示需要根据不同的场景来设置.地图的触摸事件也很丰富,有单击.双击.单指拖拽.双指拖拽. ...

  4. 大数据技术人年度盛事! BDTC 2016将于12月8-10日在京举行

    2016年12月8日-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所和CSDN共同协办的2016中国大数据技术大会(Big Data Technology ...

  5. Swift(一,创建对象,类型推导,基本运算,逻辑,字符串,数组,字典)

    swift用起来刚开始感觉有点怪怪的,但用了一段时间觉得还是挺好用的,哈哈.毕竟都是要有一个过程的嘛. 我就写一些自己在使用swift的时候的注意点吧,如有不正之处,还请指正! 一.在开发中优先使用常 ...

  6. 2016022608 - redis字符串命令集合

    redis字符串命令: Redis字符串命令用于在Redis管理字符串值.使用Redis字符串命令的语法如下所示: redis 127.0.0.1:6379> COMMAND KEY_NAME ...

  7. matlab操作之--读取指定文件夹下的“指定格式”文件

    %% 正负样本所在folder fext='*.png';%要读取的文件格式 positiveFolder='F:\课题\Crater detection\machingLearning\Positi ...

  8. Energy Minimization

    zoj2539:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2539 题意:公式第一项只要当xi=0时才会有作用,第二项只 ...

  9. ZOOKEEPER在CENTOS6上的再安装

    作DUBBO时,肯定是需要的,,对的,,DUBBO也要熟悉一下才行啦.. URL: http://www.centoscn.com/CentosServer/test/2015/0120/4531.h ...

  10. 【HDU3341】 Lost's revenge (AC自动机+状压DP)

    Lost's revenge Time Limit: 5000MS Memory Limit: 65535KB 64bit IO Format: %I64d & %I64u Descripti ...