119. Pascal's Triangle II
2017-09-14 11:27
344 查看
Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return
Note:
Could you optimize your algorithm to use only O(k) extra space?
计算杨辉三角的第k行。易知杨辉三角的第k行的第i个数就是组合数C(i,k),所以转为求组合数的问题。根据公式C(n,m)=n(n-m+1)*(n-m+2)*…*n / m!来计算。一开始分别算出分子和分母再作除法,会出现溢出的问题,换成long long还是会溢出。所以在分子相乘的过程中,只要能整除分母的元素,就除去。这样就消除了溢出的问题。
代码:
For example, given k = 3,
Return
[1,3,3,1].
Note:
Could you optimize your algorithm to use only O(k) extra space?
计算杨辉三角的第k行。易知杨辉三角的第k行的第i个数就是组合数C(i,k),所以转为求组合数的问题。根据公式C(n,m)=n(n-m+1)*(n-m+2)*…*n / m!来计算。一开始分别算出分子和分母再作除法,会出现溢出的问题,换成long long还是会溢出。所以在分子相乘的过程中,只要能整除分母的元素,就除去。这样就消除了溢出的问题。
代码:
class Solution { public: vector<int> getRow(int rowIndex) { int n = (rowIndex + 1) / 2, i, j; vector<int> res; for(i = 0; i < n; ++i) { res.push_back(comb2(i, rowIndex)); } j = i-1; if(rowIndex % 2 == 0) { res.push_back(comb2(i, rowIndex)); } for(i = 0; i < n; ++i) { res.push_back(res[j--]); } return res; } private: long long fact(int m, int n) { if(n == 0) return 1; long long res = 1; for(int i = m; i <= n; ++i) { res *= i; } return res; } int comb(int m, int n) { return fact(n-m+1, n) / fact(1, m); } int comb2(int m, int n) { long long res = 1; int k = n - m + 1, j = 2; for(int i = k; i <= n; ++i) { res *= i; while(j <= m && res % j == 0) { res /= j++; } } return res; } };
相关文章推荐
- [Leetcode]119. Pascal's Triangle II
- LeetCode 119 Pascal's Triangle II
- The Solution to Leetcode 119 Pascal's Triangle II
- 119. Pascal's Triangle II
- Leetcode 119. Pascal's Triangle II
- Leetcode-119. Pascal's Triangle II
- 119. Pascal's Triangle II
- LeetCode笔记:119. Pascal's Triangle II
- 119. Pascal's Triangle II
- 【leetcode】119. Pascal's Triangle II【java】
- leetcode119. Pascal's Triangle II
- LeetCode - 119. Pascal's Triangle II - 思路详解 - C++
- 119. Pascal's Triangle II
- Leetcode题解 119. Pascal's Triangle II
- 119. Pascal's Triangle II
- [LeetCode]118. Pascal's Triangle&119. Pascal's Triangle II
- 118/119. Pascal's Triangle/II
- 119. Pascal's Triangle II
- 119. Pascal's Triangle II
- LeetCode 119. Pascal's Triangle II