构造杨辉三角逻辑并不难,主要打印格式的对齐比较困难.
public class Main { /** * 计算行应该占得宽度 * 每个数字额外加了一个空格,数字的宽度加空格的宽度 * @param lastIntegers * @return */ static int width_of(int[] lastIntegers) { int width = 0; int length = 0; for (int lastInteger : lastIntegers) { if (lastInteger > 0) { width += numWidth(lastInteger); length++; } } width += length; return width; } static int numWidth(int num) { int count = 0; while (num > 0) { num = num / 10; count++; } return count; } public static void main(String[] args) { int n = 10; int[][] result = new int[n][n]; result[0][0] = 1; result[1][0] = 1; result[1][1] = 1; //构造杨辉三角 for (int i = 2; i < n; i++) { result[i][0] = 1; result[i][i] = 1; for (int j = 1; j <= i - 1; j++) { result[i][j] = result[i - 1][j - 1] + result[i - 1][j]; } } int maxWidth = width_of(result[n - 1]); for (int i = 0; i < n; i++) { int[] temp = result[i]; int temp_width = width_of(temp); int wihteBlankLength = (maxWidth - temp_width) / 2; for (int k = 0; k < wihteBlankLength; k++) { System.out.print(" "); } for (int j = 0; j < temp.length; j++) { if (temp[j] > 0) System.out.print(String.format("%d", temp[j]) + " "); } System.out.println(); } } }