题解 | 交换到最大
/* 每次从尾部开始操作,遍历每个元素,只要发生了置换元素,则从头开始,直到不能发生置换为止 */ import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); for (int i = 0; i < t; i++) { String s = in.next(); char[] arr = s.toCharArray(); while (true) { // 用一个布尔值,标识每次操作有没有发生置换 boolean isCharge = false; // 每次都从尾部开始 int p = arr.length - 1; while (p > 0) { char c1 = arr[p]; char c2 = arr[p - 1]; int i1 = c1 - '0';// char转int: char - '0' if (i1 > 0) {// 题目规定操作数要大于0才能操作 i1 = i1 - 1; int i2 = c2 - '0'; // char转int if (i1 > i2) {// 满足置换条件 isCharge = true; arr[p] = (char)(i2 + '0');// int转char (char)(int + '0') arr[p - 1] = (char)(i1 + '0');// int转char (char)(int + '0') } } p--; } if (!isCharge) {// 如果没有发生过置换,则标识当前字符已达到最大 break; } } System.out.println(new String(arr)); } } }