首页 > leetcode-402 移掉K位数组

leetcode-402 移掉K位数组

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

注意:

num 的长度小于 10002 且 ≥ k。

num 不会包含任何前导零。

示例 1 :

输入: num = “1432219”, k = 3

输出: “1219”

解释: 移除掉三个数字 4, 3, 和 2形成一个新的最小的数字 1219。

针对该问题,显然很好的解决办法便是贪心

从高位开始遍历整数,即在移除的数字在k的范围内,尽可能选择移除较小的数值

实现上使用栈的形态进行管理,栈保存最终的移除后的结果,并且动态变化;当出现元素小于栈顶元素的情况下将栈顶元素移除,在栈不为空或者 元素不等于零时 将该元素放入栈中。

实现如下:

string removeKdigits(string num, int k) { vector<int> S;string result = "";for (int i = 0;i < num.length(); ++i) { int number = num[i] - '0';while(S.size() != 0 && S[S.size() - 1] > number && k) { S.pop_back();k--;}if (number != 0 || S.size()) { //处理前导零的情况S.push_back(number);}}while(S.size() && k) { S.pop_back();k--;}for (int i = 0;i < S.size(); ++i) { result.append(1,'0' + S[i]);}if (result == "") { return "0";}return result;
}

更多相关:

  • 代码展示:   http://paste.ubuntu.com/23693598/ #include #include #include char * largeDiffer(char *a,char *b){ /*  使用说明 传入的a和b只能为整数 结果为a-b;返回...

  • Description We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But recently, it is reported that he hides in Hang Zhou of Ch...

  • /*Name: NYOJ--811--变态最大值Author: shen_渊 Date: 17/04/17 15:49Description: 看到博客上这道题浏览量最高,原来的代码就看不下去了 o(╯□╰)o */#include #include #include u...

  • 生成唯一号:思路,根据yymmddhhmmss+自增长号+唯一服务器号( SystemNo)生成唯一码,总长度19,例如:1509281204550000101. public class UniqueNumber {     private static long num = 0;//流水号     private sta...

  • 题目:找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n...

  •   罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符          数值 I             1 V             5 X             10 L             50 C             100 D             500 M            ...

  • 排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2076    Accepted Submission(s): 816 Problem Description Ray又...

  • Word2007中为数字加上下标的几种方法: 一:通过插入>公式>>选择,通过此上下标。 二:写下数字,例如5,然后按ctrl+shift+=号三个键,就可添加上标,按ctrl+=号两键,就可标注下标。 三、开始菜单中的X2,X2 转载于:https://www.cnblogs.com/jufu/archive/2012/03/3...