public class Test {
public void print(int lineSum) {
int sum = (lineSum + 1) * lineSum / 2;
int p = 0;
List<List<Integer>> lists = new ArrayList<>();
// 1 2 -1 -2
int dir = 1;
int line = -1;
while (p++ < sum) {
line += dir > 0 ? 1 : (dir == -1 ? -1 : 0);
if (line >= lists.size()) {
List<Integer> list = new LinkedList<>();
list.add(p);
lists.add(list);
dir = dir == 1 ? 2 : -1;
} else {
lists.get(line).add(p);
dir = dir > 0 ? dir : (dir == -1
? (line == 0 ? -2 : -1)
: 1);
}
}
printVals(lists);
}
public static void main(String[] args) {
Test solution = new Test();
solution.print(10);
}
}
输出示例
public class Main {
public static void main(String[] args) {
Main main = new Main();
List<List<Integer>> ans = main.getList(10);
//输出
int n = ans.size();
for(int i = 0; i < n; i++){
for(int j = 0; j < n-i; j++){
System.out.print(ans.get(i).get(j));
System.out.print("\t");
}System.out.println();
}
}
private List<List<Integer>> getList(int n){
List<List<Integer>> ans = new ArrayList<>();
for(int i = 0; i < n; i++){
ans.add(new ArrayList<>());
}
//最大数一共有n行,每行比前一行少一个符合等差数列,求到最大值
int maxNum = (1+n)*n/2;
int i = 0;
int j = 0;
//规律:向下走一步,向右上走多步直到i==0,向右走一步,向左下走n步直到j==0
int[][] direct = new int[][]{{1,0},{-1,1},{0,1},{1,-1}};
int index = 0;
for(int num = 1; num<=maxNum; num++){
ans.get(i).add(num);
i = i+direct[index][0];
j = j+direct[index][1];
if(index == 0||index==2||(index == 1 && i == 0)||(index == 3 && j == 0))
++index;
index = index%4;
}
return ans;
}
}
List<String> list=new ArrarList();
声明一个只包含String类型的list集合