题解 | 小红的排列构造②-Java

小红的排列构造②

https://www.nowcoder.com/practice/a4ec29e74aaa450aa8a4200fe3b06308

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); // 读取字符串长度
        String s = sc.next();  // 读取01字符串
        sc.close(); // 关闭扫描器

        // 若字符串最后一位不是1,直接输出-1(无法满足置换要求)
        if (s.charAt(n - 1) != '1') {
            System.out.println(-1);
            return;
        }

        int flag = 0; // 标记下一个置换区间的起始位置
        int[] arr = new int[n]; // 存储置换结果的数组

        // 遍历字符串,处理每个'1'对应的置换
        for (int i = 0; i < n; i++) {
            if (s.charAt(i) == '1') {
                // '0'对应的位置:值=自身索引+1(不置换)
                for (int j = flag + 1; j < i; j++) {
                    arr[j] = j + 1;
                }
                // '1'对应的位置:flag和i互换(值=对方索引+1)
                arr[flag] = i + 1;
                arr[i] = flag + 1;
                flag = i + 1; // 更新下一个置换区间起点
            }
        }

        // 输出最终置换结果
        for (int a : arr) {
            System.out.print(a + " ");
        }
    }
}

全部评论

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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