【leetcode】118. Pascal's Triangle
2016-06-15 17:13
197 查看
一、题目描述
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
题目解读:给出行数,返回一个杨辉三角
杨辉三角的特点:
(1)端点的数为1
(2)每个数等于它上方两数之和
(3)每行数字左右对称,由1开始逐渐变大
(4)第n行的数字有n项
(5)第n行数字之和为2的n-1次方。
...... 做出此题只需要前面4个特点即可。后面的特点就不一一列出了。
思路:(1)对第一行和第二行特殊处理。
(2)从第三行开始,除了端点,中间的点都需要从前面一行两个数相加得到
c++代码(3ms,16.78%)
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> result;
for(int i=1; i<=numRows; i++){ //处理1~numRows行
vector<int> s;
result.push_back(s);
if(i == 1){ //第一行
result[i-1].push_back(1);
}else if(i == 2){ //第二行
result[i-1].push_back(1);
result[i-1].push_back(1);
}else{ //从第三行开始,每行中间的数据都需要从上一行的两个数相加得到
result[i-1].insert(result[i-1].begin(),1);
result[i-1].insert(result[i-1].end()-1,1);
//先加入前后两个1,然后加入中间的元素
for(int k=1;k<=i-2;k++){
result[i-1].insert(result[i-1].begin()+k,(result[i-2][k-1]+result[i-2][k]));
}
}
}
return result;
}
};
其他代码1(0ms,25.26%)
class Solution {
public:
vector<vector<int> > generate(int numRows) {
vector<vector<int>> r(numRows);
for (int i = 0; i < numRows; i++) {
r[i].resize(i + 1);
r[i][0] = r[i][i] = 1;
for (int j = 1; j < i; j++)
r[i][j] = r[i - 1][j - 1] + r[i - 1][j];
}
return r;
}
};
其他代码2
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> res;
for(auto i=0;i<numRows;++i)
{
res.push_back(vector<int>(i+1,1));
for(auto j=1; j<i; ++j) res[i][j] = res[i-1][j-1] + res[i-1][j];
}
return res;
}
};
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] ]
题目解读:给出行数,返回一个杨辉三角
杨辉三角的特点:
(1)端点的数为1
(2)每个数等于它上方两数之和
(3)每行数字左右对称,由1开始逐渐变大
(4)第n行的数字有n项
(5)第n行数字之和为2的n-1次方。
...... 做出此题只需要前面4个特点即可。后面的特点就不一一列出了。
思路:(1)对第一行和第二行特殊处理。
(2)从第三行开始,除了端点,中间的点都需要从前面一行两个数相加得到
c++代码(3ms,16.78%)
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> result;
for(int i=1; i<=numRows; i++){ //处理1~numRows行
vector<int> s;
result.push_back(s);
if(i == 1){ //第一行
result[i-1].push_back(1);
}else if(i == 2){ //第二行
result[i-1].push_back(1);
result[i-1].push_back(1);
}else{ //从第三行开始,每行中间的数据都需要从上一行的两个数相加得到
result[i-1].insert(result[i-1].begin(),1);
result[i-1].insert(result[i-1].end()-1,1);
//先加入前后两个1,然后加入中间的元素
for(int k=1;k<=i-2;k++){
result[i-1].insert(result[i-1].begin()+k,(result[i-2][k-1]+result[i-2][k]));
}
}
}
return result;
}
};
其他代码1(0ms,25.26%)
class Solution {
public:
vector<vector<int> > generate(int numRows) {
vector<vector<int>> r(numRows);
for (int i = 0; i < numRows; i++) {
r[i].resize(i + 1);
r[i][0] = r[i][i] = 1;
for (int j = 1; j < i; j++)
r[i][j] = r[i - 1][j - 1] + r[i - 1][j];
}
return r;
}
};
其他代码2
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> res;
for(auto i=0;i<numRows;++i)
{
res.push_back(vector<int>(i+1,1));
for(auto j=1; j<i; ++j) res[i][j] = res[i-1][j-1] + res[i-1][j];
}
return res;
}
};
相关文章推荐
- eclipse崩溃后,项目无法启动报错Removing obsolete files from server... Could not clean server 。。。。
- 计算机组成原理 8
- 获取当前时间,并以要求格式展示SimpleDateFormat
- [深入浅出Cocoa]详解键值观察(KVO)及其实现机理
- Swift对字典的常用基本使用
- c# 使用webbrower做界面
- xz学习记录-后台部分
- sap 采购模式
- hdu3480(斜率dp)
- Android 利用addView 动态给Activity添加View组件
- 用Hadoop Streaming来写wordcount
- Thinking in java(1):对象导论
- 对《软件工程》课程的总结
- Springer LNCS 计算机科学投稿论文模板下载 Information for Authors of Computer Science Publications
- RSA使用总结(ios,openssl)
- 使用输入法时使界面自动上移的方法
- Linux kernel中断子系统之(五):驱动申请中断API
- [ 每日一课】 Python官方文档 1 -- 简介
- 图解HTTPS、GET和POST
- shape 圆角