原题链接:最小新整数
解题思路:
贪心算法
注意事项:
在做算法优化时,可以考虑在删除元素时让索引退一,但是需要区分都不删除和中间删除,头部删除是不需要退一的,中间删除需要退一。
参考代码:
public static StringBuffer function1(String numString, int count) { StringBuffer sBuilder = new StringBuffer(numString); int i=0; for(; i<sBuilder.length()-1 && count>0; i++) { if(sBuilder.charAt(i) > sBuilder.charAt(i+1)) { sBuilder.deleteCharAt(i); count--; i = i==0?i-1:i-2; //当删除的数据是第一个元素时:i-1,否则i-2 //原因是:头部元素删除时,i不变,中间数据删除时,i退一,但是由于存在for中的i++,所以需要先退1 } } if(i==sBuilder.length()-1 && count>0) { while (--count>=0){ sBuilder.deleteCharAt(sBuilder.length()-1); } while(sBuilder.charAt(0)=='0'&&sBuilder.length()>1) { sBuilder.deleteCharAt(0); } } return sBuilder; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int t = scanner.nextInt(); //2 for(int i=0; i<t; i++) { String numString = scanner.next();// 9128456 int count = scanner.nextInt(); //2 StringBuffer res = function1(numString, count); System.out.println(res); } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复