给定一个以字符串表示的非负整数 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
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
生成唯一号:思路,根据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...