leecode 解题总结:119. Pascal's Triangle II
2017-02-15 19:48
405 查看
#include <iostream> #include <stdio.h> #include <vector> using namespace std; /* 问题: Given an index k, return the kth row of the Pascal's triangle. 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行的杨辉三角,只能使用k个常量的空间。 这个明显用公式(a+b)^n=C(n,k) * a^(n-k) * b^k 累加求和,其中k从0到n C(n,k) = n! / ( (k!) * (n-k)! )来计算,k从0到n 输入: 0 3 输出: 1 1,3,3,1, 报错:输入21,溢出,用long long 仍然溢出:输入30溢出 关键: 1 关于溢出,看到阶乘想到long long,如果long long 溢出, 用迭代求,迭代仍然报错,不能直接用result.at(i) = result.at(i-1) *(rowIndex - i + 1) / i; 则之前的乘积必须用long long变量来求,后面存储最终结果用一下转换 2 C(n,k) = n! / ( (k!) * (n-k)! ) , i累加时, 初始结果为1,计算下一个结果是乘以:n/1,再下一个是(n-1)/2,(n-2)/3,...,1/n 。 但是这样计算需要转化为浮点数 */ class Solution { public: vector<int> getRow(int rowIndex) { if(rowIndex < 0) { vector<int> result; return result; } vector<int> result(rowIndex + 1 , 1);//初始化 //初始化阶乘,用long long也会溢出,说明题目想让我们迭代求 //C(n,k) = n! / ( (k!) * (n-k)! ) , i累加时, long long current = 1; long long temp; for(int i = 1 ; i <= rowIndex ; i++) { //result.at(i) = ( (fact.at(rowIndex) / fact.at(i) ) / fact.at(rowIndex - i) );//类型转换没有用 //初始结果为1,计算下一个结果是乘以:n/1,再下一个是(n-1)/2,(n-2)/3,...,1/n 。 但是这样计算需要转化为浮点数 temp = current * (rowIndex - i + 1) / i; current = temp; result.at(i) = (int) temp;//转换为整形 } return result; } }; void print(vector<int >& result) { if(result.empty()) { cout << "no result" << endl; return; } int size = result.size(); for(int i = 0 ; i < size ; i++) { cout << result.at(i) << "," ; } cout << endl; } void process() { int num; Solution solution; vector<int > result; while(cin >> num ) { result = solution.getRow(num); print(result); } } int main(int argc , char* argv[]) { process(); getchar(); return 0; }
相关文章推荐
- 【LeetCode】119.Pascal's Triangle II(Easy)解题报告
- Leetcode 119. Pascal's Triangle II 杨辉三角2 解题报告
- [Array]-119. Pascal's Triangle II(@python)解题报告
- [Leetcode] 119. Pascal's Triangle II 解题报告
- leedcode做题总结,题目Pascal's Triangle I/II-------2012/10/28
- 119. Pascal's triangle II Leetcode Python
- leetcode: (119) Pascal's Triangle II
- 118. Pascal's Triangle && 119. Pascal's Triangle II
- 【LeetCode】119 Pascal's Triangle II
- leetcode-118&119 Pascal's Triangle I & II
- [Leetcode]#119 Pascal's Triangle II
- Algorithms—119.Pascal's Triangle II
- 【Leetcode】119. Pascal's Triangle II
- [119]Pascal's Triangle II
- [Leetcode 118 and 119, Easy] Pascal's Triangle (I and II)
- LeetCode(119) Pascal's Triangle II
- LeetCode 119 Pascal's Triangle II
- LeetCode 119 Pascal's Triangle II
- [leetCode 118 & 119] Pascal's Triangle I && II (杨辉三角问题)
- leetcode:119 Pascal's Triangle II-每日编程第二十五题