题目:
题目:(只贴了 Pascal's Triangle的题目,II的不贴了,思想在下面一起介绍,下面只贴 Pascal's Triangle II的代码)
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
解答:此题是二项式系数的一种应用,可以发现每行都是相应的二项式系数,其实也可以用相关知识推导出来,就是C(n,k) = C(n-1,k) + C(n-1,k-1),和此题目的环境是一样的,也就推出全部都是相应的二项式系数
在计算二项式系数的时候为了简单快速可以使用前后两个系数之间的关系,为了防止精度问题导致最终出错,可以求一下gcd,这样会保证能够直接整除,不会出现精度导致的问题
class Solution { int gcd(int a, int b) { return (b == 0) ? a : gcd(b, a % b); } public: vector<int> getRow(int rowIndex) { vector<int> answer; int c = 1; for (int i = 0; i <= rowIndex; ++i) { answer.push_back(c); int d = gcd(rowIndex - i, i + 1); c = c / ((i + 1) / d) * ((rowIndex - i) / d); } return answer; } };