* 给定一个以字符串表示的非负整数 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;