习惯行和列从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();
        }
    }
}

全部评论

相关推荐

猫头夜鹰:图书管理系统能有面试就怪了,放十年前都不行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务