B站二面手撕

49 阅读1分钟

n =3 ,打印

 1
121
 1

n = 5,打印

  1
 121
12321
 121
  1

Code

package linkedList;
import java.util.*;
public class LingXing {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        printDiamond(n);
    }

    public static void printDiamond(int n) {
        // 处理偶数情况
        if (n % 2 == 0) {
            System.out.println(-1);
            return;
        }

        int mid = n / 2 + 1;  // 中间行

        // 打印上半部分包括中间行
        for (int i = 1; i <= mid; i++) {
            int dots = mid - i;
            // 打印前导点
            for (int j = 1; j <= dots; j++) {
                System.out.print(".");
            }
            // 打印左半数字(递减)
            for (int j = 1; j <= i; j++) {
                System.out.print(j);
            }
            // 打印右半数字(递增,从2开始)
            for (int j = i-1; j >= 1; j--) {
                System.out.print(j);
            }
            // 打印后导点
            for (int j = 1; j <= dots; j++) {
                System.out.print(".");
            }
            System.out.println();
        }

        // 打印下半部分
        for (int i = mid - 1; i >= 1; i--) {
            int dots = mid - i;
            // 打印前导点
            for (int j = 1; j <= dots; j++) {
                System.out.print(".");
            }
            // 打印左半数字(递减)
            for (int j = 1; j <= i; j++) {
                System.out.print(j);
            }
            // 打印右半数字(递增,从2开始)
            for (int j = i-1; j >= 1; j--) {
                System.out.print(j);
            }
            // 打印后导点
            for (int j = 1; j <= dots; j++) {
                System.out.print(".");
            }
            System.out.println();
        }
    }
}