本人电子系,只为一学生。心喜计算机,小编以怡情。
给出一个字符串 A, 表示一个 n 位正整数, 删除其中 k 位数字, 使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数。
找到删除 k 个数字之后的最小正整数。
N <= 240, k <= N
样例:
给出一个字符串代表的正整数 A 和一个整数 k, 其中 A = 178542, k = 4
返回一个字符串 “12”
经验:Stack里放StringBuffer,StringBuffer改变,那么Static也会变化。
也就是说,Stack里不能存放可变的变量,因为可变的变量发生变化,Stack也会发生变化,导致原本想要保存当前值,最后保存不了。
思路:贪心法赛高!
public String DeleteDigits(String A, int k) {
// write your code here
if(A.length()==0)return "0";
StringBuffer a=new StringBuffer(A);
Stack<StringBuffer> linshi=new Stack<>();//用栈来保存删改前的数据
for(int i=0;i<k;i++)
{
StringBuffer min=new StringBuffer(a.substring(0, a.length()-1));//将min赋一个值,随便就好,我这里用0~length-1
for(int j=0;j<a.length();j++)
{
linshi.push(new StringBuffer(a));//记住一定要new一个,否则a改变这里也会改变
StringBuffer temp=a.deleteCharAt(j);//贪心法,删一个试一试
min=min.toString().compareTo(temp.toString())<0?min:temp;//和原先相比谁大谁小
a=linshi.pop();//再将a变成修改前的数据
}
a=min;//找到最小后将其赋给a,表明删除一个元素后的最小值
//继续循环
}
int i=0;
for(;a.charAt(i)=='0';i++);//消除零,比如023就是23
return a.toString().substring(i, a.length());
}