习惯行和列从1开始,那么对应到数组的索引要减1
蛇形矩阵
https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
import java.util.ArrayList; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); ArrayList<int[]> rowList = new ArrayList<>(); // 行数 for (int i = 1, k = n; i <= n; i++, k--) { int[] numArr = new int[k]; // 所在行数 + 1 = 每行首次需要加的值 int x = i + 1; // 该行的数字 for (int g = 1; g <= numArr.length; g++) { // 第一行第一个数 if (i == 1 && g == 1) { // 索引每次从0开始,所以都需要减1 numArr[g - 1] = 1; continue; } // 除了第一行以外的每一行的第一个数 if (g == 1) { // 每一行的第一个数 = 上一行的第一个数 + (所在行数 - 1) numArr[0] = rowList.get(i - 1 - 1)[0] + (i - 1); continue; } // 其他行非第一个的数 = 上一个数 + 差值(每次多一) numArr[g - 1] = numArr[g - 1 - 1] + x; x = x + 1; } rowList.add(numArr); } // 打印 for (int m = 0; m < rowList.size(); m++) { int[] ints = rowList.get(m); StringBuilder stringBuilder = new StringBuilder(); for (int j = 0; j < ints.length; j++) { stringBuilder.append(ints[j] + " "); } stringBuilder.deleteCharAt(stringBuilder.length() - 1); System.out.print(stringBuilder); // 打印完行后换行 System.out.println(); } } }