移動端除錯Web頁面
阿新 • • 發佈:2020-11-25
技術標籤:力扣
題目
給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。
在楊輝三角中,每個數是它左上方和右上方的數的和。
示例:
方法一:數學
楊輝三角,是二項式係數在三角形中的一種幾何排列。它是中國古代數學的傑出研究成果之一,它把二項式係數圖形化,把組合數內在的一些代數性質直觀地從圖形中體現出來,是一種離散型的數與形的結合。
楊輝三角具有以下性質:
- 每行數字左右對稱,由 1 開始逐漸變大再變小,並最終回到 1。
- 第 n 行(從 00 開始編號)的數字有 n+1 項,前 n 行共有 n(n+1)/2 個數。
- 第 n 行的第 m 個數(從 0 開始編號)可表示為可以被表示為組合數 C(n,m),記作 C n
- 每個數字等於上一行的左右兩個數字之和,可用此性質寫出整個楊輝三角。即第 nn 行的第 ii 個數等於第 n-1n−1 行的第 i-1i−1 個數和第 ii 個數之和。這也是組合數的性質之一,
- (a+b)n 的展開式(二項式展開)中的各項係數依次對應楊輝三角的第 n 行中的每一項。
依據性質 4,我們可以一行一行地計算楊輝三角。每當我們計算出第 i 行的值,我們就可以線上性時間複雜度內計算出第 i+1 行的值。
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> ret(numRows);
for (int i = 0; i < numRows; ++i) {
ret[i].resize(i + 1);
ret[i][0] = ret[i][i] = 1;
for (int j = 1; j < i; ++j) {
ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];
}
}
return ret;
}
};
複雜度分析
時間複雜度:O(numRows2)。
空間複雜度:O(1)。不考慮返回值的空間佔用。