目录
题目
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
注意:
num 的长度小于 10002 且 ≥ k。
num 不会包含任何前导零。
示例 1 :输入: num = "1432219", k = 3
输出: "1219"
解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
示例 2 :输入: num = "10200", k = 1
输出: "200"
解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
示例 3 :输入: num = "10", k = 2
输出: "0"
解释: 从原数字移除所有的数字,剩余为空就是0。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-k-digits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
运行时间
代码
我的思想就是在保证位数确定的情况下,每次选择一位字符。如(1,4,3,2,2,1,9),3这个例子。我会在(1,4,3,2)中选择最小的字符。然后num字符就变成了(4,3,2,2,1,9)这样循环下去。效率好像不行。
class Solution { public String removeKdigits(String num, int k) { int ns=num.length()-k;//记录所需要选的字符位数 String s="";//记录新字符串 while(ns>0) { String str=num.substring(0,num.length()-ns+1); int fl=0;//记录当前所选择的最小的位的下标 char fc=num.charAt(0);//记录字符 for(int i=1;i<str.length();i++) { if(str.charAt(i)<fc) { fc=str.charAt(i); fl=i; } } num=num.substring(fl+1,num.length());//更新字符串 ns--; s=s+fc; } while(s!=""&&s.charAt(0)=='0') { if(s.length()>1) s=s.substring(1,s.length()); else s=""; } if(s=="") s="0"; return s; } }