1. 程式人生 > 實用技巧 >移動端除錯Web頁面

移動端除錯Web頁面

技術標籤:力扣

題目

給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。

在這裡插入圖片描述
在楊輝三角中,每個數是它左上方和右上方的數的和。

示例:
在這裡插入圖片描述

方法一:數學

楊輝三角,是二項式係數在三角形中的一種幾何排列。它是中國古代數學的傑出研究成果之一,它把二項式係數圖形化,把組合數內在的一些代數性質直觀地從圖形中體現出來,是一種離散型的數與形的結合。

楊輝三角具有以下性質:

  1. 每行數字左右對稱,由 1 開始逐漸變大再變小,並最終回到 1。
  2. 第 n 行(從 00 開始編號)的數字有 n+1 項,前 n 行共有 n(n+1)/2 個數。
  3. 第 n 行的第 m 個數(從 0 開始編號)可表示為可以被表示為組合數 C(n,m),記作 C n
    m 或(nm),即為從 n 個不同元素中取m個元素的組合數。我們可以用公式表示它:在這裡插入圖片描述
  4. 每個數字等於上一行的左右兩個數字之和,可用此性質寫出整個楊輝三角。即第 nn 行的第 ii 個數等於第 n-1n−1 行的第 i-1i−1 個數和第 ii 個數之和。這也是組合數的性質之一,在這裡插入圖片描述
  5. (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)。不考慮返回值的空間佔用。