给你一个以字符串表示的非负整数num
和一个整数k
,移除这个数中的k
位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字: public class RemovetheKdigits { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("please input a numberString :"); String str= input.next(); System.out.println("please input a k:" ); int k= input.nextInt(); String s = removeKdigits(str, k); System.out.println(s); } public static String removeKdigits(String num, int k) { // Deque<Character>deque=new LinkedList<>();//创建了一个两端队列集合:创建值为字符的堆 for (int i = 0; i < num.length(); i++) { char c=num.charAt(i); while (!deque.isEmpty()&&k>0&&deque.peekLast()>c){ //.peekLast()上述方法用于返回给定双端队列的尾部。另一方面,如果双端队列为空,则该方法可能返回 null。 k--; deque.pollLast(); } deque.offerLast(c);//向堆中添加元素 } for (int i=0;i<k;i++)//如果k还没删完那么在后面删 { deque.pollLast();//向堆中删除元素 } boolean falg=true; StringBuilder stringBuilder=new StringBuilder();//创建一个动态字符串 while(!deque.isEmpty()){ char a=deque.pollFirst();//将队列中第一个元素删除,并且放入digit中 if (falg==true&&a=='0'){//只有第一次循环的时候队列第一个元素为0才执行 continue; } falg=false; stringBuilder.append(a);//向字符串中添加元素 } return stringBuilder.length()==0?"0":stringBuilder.toString(); } }
力扣移掉K位数字的问题
于 2022-11-30 15:35:10 首次发布