给定一个非负整数numRows,生成Pascal的第一个numRows’s triangle.
Example: Input: 5 Output: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
解决方案分析:
在每一行中,第一个和最后一个元素为1。另一个元素是上一行中两个元素的总和。例如
1 3 3 1上一行
1 1 + 3 3 + 3 3 + 1 1下一行
1 4 6 4 1前一行
1 1 + 4 4 + 6 6 + 4 4 + 1 1下一行
因此,可以如下面的代码所示直接解决此问题:
C ++解决方案
#include<iostream> #include<string> #include<vector> using namespace std; vector<vector<int>> generate(int numRows) { vector<vector<int>> result; for(auto i=0;i<numRows;++i) { result.push_back(vector<int>(i+1,1)); for(auto j=1; j<i; ++j) { result[i][j] = result[i-1][j-1] + result[i-1][j]; } } return result; } int main() { int numRows = 4; vector<vector<int> > result = generate (numRows); for (int i = 0; i < result.size(); i++) { for (int j = 0; j < result[i].size(); j++) { cout<< result[i][j]<<" "; } cout<<endl; } }
输出:
1 1 1 1 2 1 1 3 3 1
该网站上可用的教程列表:
C编程20+章 | C ++编程80+章 |
100多个编码问题 | 数据结构和算法85+章 |
系统设计20+章 | Shell脚本编写12章 |
4g LTE 60+章节 | 最常见的编码问题 |
5G NR 50+章 | Linux系统编程20+章 |