题解 | 交换到最大

/*
每次从尾部开始操作,遍历每个元素,只要发生了置换元素,则从头开始,直到不能发生置换为止
*/
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));
        }
    }
}


全部评论

相关推荐

07-01 19:00
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
投递长鑫存储等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务