118. Pascal's Triangle
2017-03-02 19:31
363 查看
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
Subscribe to see which companies asked this question.
惯例翻译题目:
输入一个行数,输出帕斯卡三角;
思路:
用一个二维数组去存储这个帕斯卡三角,然后输出这个二维数组;
由于这个每一行的元素个数不一样,因此需要每一行都要resize它的元素个数;
然后如果输入是0,则直接返回vals;
输入是1和2,则直接赋值然后返回;
帕斯卡三角从第三行开始,每一行的第一个和最后一个元素是1,中间的任意一个元素vals[i][j]=vals[i-1][j-1]+vals[i-1][j];
最后输出它即可;
代码:
class Solution {
public:
vector<vector<int>>generate(int numRows) {
vector<vector<int>> vals;
vals.resize(numRows);
if(numRows==0){
return vals;
}
if(numRows<3){
if(numRows==1){
vals[0].resize(1);
vals[0][0]=1;
return vals;
}
else{
vals[0].resize(1);
vals[1].resize(2);
vals[0][0]=1;
vals[1][0]=1;
vals[1][1]=1;
return vals;
}
}
else{
vals[0].resize(1);
vals[0][0]=1;
vals[1].resize(2);
vals[1][0]=1;
vals[1][1]=1;
for(int i=2;i<numRows;i++){
int j=i;
j++;
vals[i].resize(j);
vals[i][0]=1;
vals[i][i]=1;
for(int k=1;k<i;k++){
vals[i][k]=vals[i-1][k-1]+vals[i-1][k];
}
}
return vals;
}
}
};
错误一:没考虑输入的numRows是0的情况;
输入为0,则输出为[];
注释掉6~9行的情况;
//if(numRows==0){
// return vals;
//}
错误二:如果vector是作为一个二维数组用的话,那么myVector.resize(numrows)就是只定义了有多少行,或者说多少个一维数组,具体一维数组里面的元素个数还需要另外定义,比如myVector[i].resize(j);
这是注释掉第十七行的情况: //vals[1].resize(2);
错误三:越界问题
需要注意的是resize的话是里面的元素的个数,但是数组的下标从0开始;
这是因为数组下标从0开始,杨辉三角的每行最后一个是1,因此要计算到倒数第二个,如果是第i行,那就是myVector[i-1][i-2],而不要计算到最后一个,这样就会加到一个不知道哪里来的数字;
for(int i=2;i<numRows;i++){
int j=i;
j++;
vals[i].resize(j);
vals[i][0]=1;
vals[i][i]=1;
for(int k=1;k<j;k++){
vals[i][k]=vals[i-1][k-1]+vals[i-1][k];
}
将k<j转成k<i就行;
For example, given numRows = 5,
Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
Subscribe to see which companies asked this question.
惯例翻译题目:
输入一个行数,输出帕斯卡三角;
思路:
用一个二维数组去存储这个帕斯卡三角,然后输出这个二维数组;
由于这个每一行的元素个数不一样,因此需要每一行都要resize它的元素个数;
然后如果输入是0,则直接返回vals;
输入是1和2,则直接赋值然后返回;
帕斯卡三角从第三行开始,每一行的第一个和最后一个元素是1,中间的任意一个元素vals[i][j]=vals[i-1][j-1]+vals[i-1][j];
最后输出它即可;
代码:
class Solution {
public:
vector<vector<int>>generate(int numRows) {
vector<vector<int>> vals;
vals.resize(numRows);
if(numRows==0){
return vals;
}
if(numRows<3){
if(numRows==1){
vals[0].resize(1);
vals[0][0]=1;
return vals;
}
else{
vals[0].resize(1);
vals[1].resize(2);
vals[0][0]=1;
vals[1][0]=1;
vals[1][1]=1;
return vals;
}
}
else{
vals[0].resize(1);
vals[0][0]=1;
vals[1].resize(2);
vals[1][0]=1;
vals[1][1]=1;
for(int i=2;i<numRows;i++){
int j=i;
j++;
vals[i].resize(j);
vals[i][0]=1;
vals[i][i]=1;
for(int k=1;k<i;k++){
vals[i][k]=vals[i-1][k-1]+vals[i-1][k];
}
}
return vals;
}
}
};
错误一:没考虑输入的numRows是0的情况;
输入为0,则输出为[];
注释掉6~9行的情况;
//if(numRows==0){
// return vals;
//}
错误二:如果vector是作为一个二维数组用的话,那么myVector.resize(numrows)就是只定义了有多少行,或者说多少个一维数组,具体一维数组里面的元素个数还需要另外定义,比如myVector[i].resize(j);
这是注释掉第十七行的情况: //vals[1].resize(2);
错误三:越界问题
需要注意的是resize的话是里面的元素的个数,但是数组的下标从0开始;
这是因为数组下标从0开始,杨辉三角的每行最后一个是1,因此要计算到倒数第二个,如果是第i行,那就是myVector[i-1][i-2],而不要计算到最后一个,这样就会加到一个不知道哪里来的数字;
for(int i=2;i<numRows;i++){
int j=i;
j++;
vals[i].resize(j);
vals[i][0]=1;
vals[i][i]=1;
for(int k=1;k<j;k++){
vals[i][k]=vals[i-1][k-1]+vals[i-1][k];
}
将k<j转成k<i就行;
相关文章推荐
- 118. Pascal's Triangle 杨辉三角
- 二维数组的生成-【leetcode118- Pascal's Triangle 】
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- leetcode[118]:Pascal's Triangle
- 118. Pascal's Triangle&&119. Pascal's Triangle II
- 【一天一道LeetCode】#118. Pascal's Triangle
- Leetcode - Array - 118. Pascal's Triangle(杨辉三角)
- 118. Pascal's Triangle
- [leetcode: Python] 118.Pascal's Triangle
- 118. Pascal's Triangle
- leetcode_question_118 Pascal's Triangle
- leetcode || 118、Pascal's Triangle
- LeetCode OJ 系列之118 Pascal's Triangle --Python
- 118. Pascal's Triangle
- [leetcode] 118. Pascal's Triangle
- Leetcode 118 Pascal's Triangle
- 118. Pascal's Triangle
- 118. Pascal's Triangle
- [118]Pascal's Triangle