数组拼接

爱笑的小胡纸 / 2023-08-11 / 原文

1. 题目:

题目描述:
现在有多组整数数组,需要将他们合并成一个新的数组。合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。如样例1,获得长度3,先遍历第一行,获得2,5,6;再遍历第二行,获得1,7,4;再循环回到第一行,获得7,9,5;再遍历第二行,获得3,4;再回到第一行,获得7,按顺序拼接成最终结果。

输入描述:
第一行是每次读取的固定长度,长度>0;
第2-n行是需要合并的数组,不同的数组用回车换行分隔,数组内部用逗号分隔。

输出描述:
输出一个新的数组,用逗号分隔。

-------------示例---------------------------------------------------------------------------
输入:
3
2,5,6,7,9,5,7
1,7,4,3,4
4,5,7,1,3,8

输出:
2,5,6,1,7,4,4,5,7,7,9,5,3,4,1,3,8,7

2. 答案:

class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        in.nextLine();
        ArrayList<String> list = new ArrayList<>();
        while (!in.hasNext("#")) {
            // 以#结束,这里你可以修改成其他的
            list.add(in.nextLine());
        }
        solution(list, num);
    }

    private static void solution(ArrayList<String> list, int num) {
        String result = ""; // 作为最终的返回结果
        while (!isNull(list)) {
            for (int i = 0; i < list.size(); i++) {
                String str = list.get(i);
                if (str == null) {
                    continue;
                }
                String[] arr = str.split(",");
                if (str.length() > 0) {
                    if (arr.length <= num) {
                        result = result + str + ",";
                        list.set(i, null);
                    } else {
                        for (int j = 0; j < num; j++) {
                            result = result + arr[j] + ",";
                        }
                        String remains = ""; // 删除掉取出的部分
                        for (int j = num; j < arr.length; j++) {
                            if (j == arr.length - 1) {
                                remains = remains + arr[j];
                            } else {
                                remains = remains + arr[j] + ",";
                            }
                        }
                        list.set(i, remains); // 将没取完的数组重新覆盖
                    }
                } else {
                    list.set(i, null); // 删掉取完的内容
                }
            }
        }
        System.out.println(result.substring(0, result.length() - 1));
    }

    private static boolean isNull(ArrayList<String> list) {
        int i;
        for (i = 0; i < list.size(); i++) {
            if (list.get(i) != null) {
                break;
            }
        }
        if (i < list.size()) {
            return false;
        }
        return true;
    }
}

输出结果: