第一行输入一个整数
,表示测试用例数量。
此后
行,每行输入一个不含前导零的数字字符串
,满足
。
保证所有测试用例的
之和不超过
。
对于每个测试用例,在一行上输出通过任意次数操作后能够得到的字典序最大的字符串。
6 19 1709 11555 51476 9876543210 5891917899
81 6710 33311 55431 9876543210 7875567711
以
为例:
![]()
![]()
![]()
;
![]()
![]()
![]()
,得到答案
。
再以
为例,可按如下序列操作:
![]()
![]()
![]()
;
![]()
![]()
![]()
;
![]()
![]()
![]()
,最终得到答案
。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.nextLine(); // 处理换行符
while (n-- > 0) {
// 读取字符串并转为整数数组
char[] chars = in.nextLine().toCharArray();
int[] s = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
s[i] = chars[i] - '0';
}
boolean flag = true;
// 循环执行操作直到无法继续
while (flag) {
flag = false;
// 从右向左执行一***作
for (int i = s.length - 1; i > 0; i--) {
// 满足差值≥2时交换并减1
if (s[i] - s[i - 1] >= 2) {
int tmp = s[i];
s[i] = s[i - 1];
s[i - 1] = tmp - 1;
}
}
// 检查是否还能操作
for (int i = s.length - 1; i > 0; i--) {
if (s[i] - s[i - 1] >= 2) {
flag = true;
break;
}
}
}
// 输出结果
for (int i : s) {
System.out.print(i);
}
System.out.println();
}
}
}