删除k个数字后的最小值
- 题目:给出一个整数,从该整数中去掉k个数字,要求剩下的数字形成的新整数尽可能的小,该如何选取被去掉的数字?
public class text{ public static void main(String[] args) { //删除k个数字后的最小值 System.out.println(removeKDigits("541270936",3)); } private static String removeKDigits(String num, int k) { //新整数的最终长度 = 原长度 - k; int newLength=num.length()-k; //创建一个栈,用于接收所有的数字 char[] stack=new char[num.length()]; int top=0; for (int i=0;i<num.length();i++){ //遍历当前数字 char c=num.charAt(i); //当栈顶数字大于遍历道德当前数字时,栈顶数字出栈(相当于删除数字) while (top>0 && stack[top-1]>c && k>0){ top--; k--; } //遍历到的当前数字入栈 stack[top++]=c; } //找到栈中第一个非0数字的位置,以此构建新的整数字符串 int offset=0; while (offset<newLength && stack[offset]=='0'){ offset++; } return offset==newLength?"0":new String(stack,offset,newLength-offset); } }
流程: