删除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); } }流程:
本文介绍了一种算法,旨在从一个整数中移除k个数字,以构造出可能的最小新整数。通过使用栈结构,算法遍历每个数字,比较并决定是否移除或保留,确保剩余数字构成最小值。最后,去除前导零得到最终结果。

1420

被折叠的 条评论
为什么被折叠?



