Solution 1
0118. Pascal’s Triangle 的变体,由于杨辉三角本身具有性质:第i行结果为以i为底的组合数序列,因此可以直接通过结算得到。同底组合数的计算过程为:
C n m = C n m − 1 × n − m + 1 m \mathcal{C}_{n}^{m}=\mathcal{C}_{n}^{m-1} \times \frac{n-m+1}{m} Cnm=Cnm−1×mn−m+1
其中, C n 0 = 1 \mathcal{C}_{n}^{0} = 1 Cn0=1。
这里面有一个额外的知识点:乘法部分可能会出现longlong结果(但是除过之后会是int),使用1LL可以在计算过程中将数据类型调整为longlong,最终返回结果调整为int。
- 时间复杂度: O ( # R o w ) O(\#Row) O(#Row),因为需要计算当前层的每一个数目
- 空间复杂度: O ( 1 ) O(1) O(1),除结果外,仅保存常数个状态变量
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> ans(rowIndex + 1);
ans[0] = 1;
for (int i = 1; i <= rowIndex; ++i) {
ans[i] = 1LL * ans[i - 1] * (rowIndex - i + 1) / i;
}
return ans;
}
};
Solution 2
Solution 1的Python实现
class Solution:
def getRow(self, rowIndex: int) -> List[int]:
ans = [1] * (rowIndex + 1)
for i in range(1, rowIndex + 1):
ans[i] = ans[i - 1] * (rowIndex - i + 1) // i
return ans