前言
這題的大方向是要如何找到上一行的上一列的元素來做兩兩相加的運算,像是動態規劃的邏輯思考,需要用到雙迴圈的關係,時間複雜度達 O(n²)
,這裡有 JAVA 和 Python 的寫法。
題目
Given an integer
numRows
, return the first numRows of Pascal’s triangle.
In Pascal’s triangle, each number is the sum of the two numbers directly above it as shown:
給定一個整數
numRows
,回傳一個相對應層數的帕斯卡三角形。
在帕斯卡三角形裡遍歷的每個數字,都是其上方兩個數的合:
題目連結:https://leetcode.com/problems/pascals-triangle/
題目限制
1 <= numRows <= 30
範例
1 | Input: numRows = 5 |
1 | Input: numRows = 1 |
思路&筆記
這題的大方向是要如何找到上一行的上一列的元素來做兩兩相加的運算,像是動態規劃的邏輯思考。
- 首先我們把帕斯卡三角形想像成一個大型的 List,再把這個大型的 List 裡的每個元素放入個別 List 裡來當作每一列。
- 已經有了兩個要件,接著用雙迴圈去遍歷大型的 List 裡的每一列放我們要放的元素。
- 可是不要忘了要判斷每一列的頭跟尾都要是 1 才能把對的元素放在對位置。
- 解決頭尾已經是 1 了,再把前一列的兩值加起來後依依放進去。 (這邊要注意,因我們用的是 ArrayList 類,需要用
.get()
方法來取得元素的位置)- 最後把每一列放入大型的 List 裡。
JAVA 實現
1 | class Solution { |
Python 實現
使用了和 Java 一樣的邏輯執行,換成 Python 的寫法。
1 | class Solution: |
成績
Language | Runtime | Memory |
---|---|---|
Java | 1ms | 41.1MB |
Python | 48ms | 16.3MB |