* 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
*
输入: num = "1432219", k = 3
输出: "1219"
解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
*/
思路:
/**
* 从左到右遍历每一位,放入stack
* 弹出stack与当前比较,弹出较大替换,弹出较小插入,直到替换了k个为止
* 对于0开头不断截取直到第一位不是0
*/
if(k==num.length()){
return "0";
}
Stack<Character> s=new Stack();;
int r=k;
s.push(num.charAt(0));
String str="";
for(int i=1;i<num.length();i++){
while(!s.isEmpty()&&r>0&&s.peek()>num.charAt(i)){
s.pop();
r--;
}
s.push(num.charAt(i));
}
char []c=new char[s.size()];
for(int i=s.size()-1;i>=0;i--){
c[i]=s.pop();
}
for(int i=0;i<num.length()-k;i++){
str=str+c[i];
}
while(str.length()>1&&str.charAt(0)=='0')
str=str.substring(1, str.length());
return str;