LeetCode精選TOP面試題118.楊輝三角

題目描述

給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。
楊輝三角示意圖
在楊輝三角中,每個數是它左上方和右上方的數的和。

示例:
輸入: 5
輸出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

解題思路

1.第一行單獨處理,只有一個元素 1;
2.處理第 2 到 n 行:
(1)每一行的第一個元素是 1, 單獨處理
(2)根據楊輝三角的特點,每一行的第 2 (當 行數 > 2 時)到 “行數- 1” 個元素的值, 是它左上方和右上方的數的和;
(3)每一行的最後一個元素也是 1,單獨處理

代碼(Java實現)

import java.util.ArrayList;
import java.util.List;

/**
 * @author : flower48237
 * @2020/2/25 22:09
 * explanation: LeetCode精選TOP面試題118.楊輝三角
 */
public class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> triangle = new ArrayList<List<Integer>>();
        if(numRows < 1){ // 判斷合法性
            return triangle;
        }
        // 第一行單獨處理,只有一個元素 1
        List<Integer> first = new ArrayList<>();
        first.add(1);
        triangle.add(first);

        // 處理第 2 到 n 行
        for (int rownum = 1; rownum < numRows; rownum ++){
            // 創建新的一行
            List<Integer> newrow = new ArrayList<>();
            // 獲取當前新行的上一行
            List<Integer> prerow = triangle.get(rownum - 1);
            // 每一行的第一個元素是 1, 單獨處理
            newrow.add(1);
            // 根據楊輝三角的特點
            // 每一行的第 2 (當 行數 > 2 時)到 “行數- 1” 個元素的值, 是它左上方和右上方的數的和
            for (int k = 1; k < rownum; k ++){
                newrow.add(prerow.get(k - 1) + prerow.get(k));
            }
            

            // 每一行的最後一個元素也是 1,單獨處理
            newrow.add(1);
            triangle.add(newrow);
         }
        return triangle;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章