分享

华为秋招_多数组合并问题



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

import java.util.ArrayList;
import java.util.Scanner;

public class biShi {

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

        public static void Alg(ArrayList<String> ma, int num) {
                String tem = "";// 作为最后的返回结果
                while (!isNull(ma)) {
                        for (int i = 0; i < ma.size(); i++) {
                                String sk = ma.get(i);
                                if (sk == null) {
                                        continue;
                                }
                                String[] gg = sk.split(",");
                                if (sk.length() == 0) {
                                        ma.set(i, null);// 删掉取完的内容
                                } else {
                                        if (gg.length <= num) {
                                                tem = tem + sk + ",";
                                                ma.set(i, null);
                                        } else {
                                                for (int k = 0; k < num; k++) {
                                                        tem = tem + gg[k] + ",";
                                                }
                                                String hh = "";
                                                for (int l = num; l < gg.length; l++) {
                                                        if (l == gg.length - 1) {
                                                                hh = hh + gg[l];
                                                        } else {
                                                                hh = hh + gg[l] + ",";
                                                        }
                                                }
                                                // 将没取完的数组重新覆盖
                                                ma.set(i, hh);
                                        }
                                }
                        }
                }
                System.out.println(tem.substring(0, tem.length() - 1));
        }

        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                int num = sc.nextInt();
                ArrayList<String> ma = new ArrayList<String>();
                sc.nextLine();// nextInt()会留下一个回车,需要消除,否则后边会出错
                while (!sc.hasNext("#")) {// 以#结束,这里你可以修改成其他的
                        ma.add(sc.nextLine());
                }
                Alg(ma, num);
        }
}




加微信w3aboutyun,可拉入技术爱好者群

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条