一道面试题:按梯形顺序输出数组

技术 502 字
/**
 * 1
 * 7 2
 * 12 8 3
 * 16 13 9 4
 * 19 17 14 10 5
 * 21 20 18 15 11 6
 */

private static void test() {
    List<Integer> list = new ArrayList<>();
    int maxline = 6;//想输出多少行
    int linecount = maxline;
    int pos = 0;
    int step = maxline - linecount + 1;
    while (linecount > 0) {
        for (int i = 1; i <= linecount; i++) {
            list.add(pos + (i - 1) * step, list.size() + 1);
        }
        linecount--;
        pos = pos + maxline - linecount;
        step = maxline - linecount + 1;
    }

    pos = 0;
    step = 2;
    for(int i = 0; i < list.size();i++){
        System.out.print(list.get(i));
        System.out.print(" ");
        if(i == pos){
            System.out.println();
            pos = i + step;
            step++;
        }
    }
    System.out.println();
}

返回首页