一、数组---杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

 

 

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]

 

思路 

每行首尾都是1,可以先先初始化每行全是1,再计算修改

代码:

 1 class Solution {
 2 public:
 3     vector<vector<int>> generate(int numRows) {
 4         //先定义一个空数组,用来存放杨辉三角的每一行——小数组
 5         vector<vector<int>> res;
 6         //前两行是默认的数组
 7         if(numRows<=2){
 8             for(int i=0;i<numRows;i++){
 9                 vector<int> small(i+1,1);//第1行有1个1,第二行有2个1
10                 res.push_back(small);//将前两行存入到res空数组中
11             }
12             return res;//res包含了杨辉三角的前两行
13         }
14         else{
15             res = generate(numRows-1);//得到前numRows-1行的res数组
16             vector<int> newsmall(numRows,1);//初始化第numsRow行
17             //由第numRows-1行计算得到第numRows行,第numRows-1行在res数组中的索引为numRows-2
18             for(int j=0;j<res[numRows-2].size()-1;j++){
19                 newsmall[j+1] = res[numRows-2][j] + res[numRows-2][j+1];
20             }
21             res.push_back(newsmall);
22         }
23         return res;
24     }
25 };

 

posted @ 2019-06-08 18:34  Austin_anheqiao  阅读(359)  评论(0编辑  收藏  举报