1. 程式人生 > 其它 >Leetcode118.楊輝三角

Leetcode118.楊輝三角

Leetcode118.楊輝三角

題目描述

/**
     * 
     * 給定一個非負整數 numRows,生成「楊輝三角」的前 numRows 行。
     * <p>
     * 在「楊輝三角」中,每個數是它左上方和右上方的數的和。
     */

思路分析

  1. 楊輝三角,即每一層的第一個數字和最後一個數字都為1,其他數字為上一層兩數字之和
  2. 基於上述規律,使用兩層迴圈生成楊輝三角每一層的數字
  3. 外層迴圈控制生成每一層數字,內層迴圈用於生成每一層具體的數字
  4. 使用集合儲存每一層的關係,具體生成方法見原始碼
  5. 原始碼見下

原始碼及分析

/**
     *
     * @param numRows 指定行數
     * @return 返回生成的楊輝三角
     */
    public List<List<Integer>> generate(int numRows) {
        //定義儲存集合的集合用於儲存楊輝三角
        List<List<Integer>> res = new ArrayList<>();
        //外層迴圈控制總共生成多少層
        for (int i = 0; i < numRows; i++) {
            //使用集合儲存每層的數字
            ArrayList<Integer> level = new ArrayList<>();
            //內層迴圈生成每層的數字
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    level.add(1);
                } else {
                    //當前層當前數字等於上一層兩數字之和
                    level.add(res.get(i - 1).get(j - 1) + res.get(i - 1).get(j));
                }
            }
            res.add(level);
        }
        return res;
    }