原題目:
給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。
在楊輝三角中,每個數是它左上方和右上方的數的和。
示例:
輸入: 5
輸出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
思路1:首先生成每一個行中列數量都不同的vecotr數組並且將它們賦值爲0,然後用一個二維數組按照規律進行賦值即可。
代碼1;
class Solution {
public:
vector<vector<int>> generate(int numRows) {
int zone=1;
vector<vector<int>> v(numRows, vector<int>());//初始層數,賦值
for (int i = 0; i < numRows; i++) {
v[i].resize(zone++);//設置每一層的個數並且賦值爲0;
}
for (int i = 0; i < numRows; i++) {
for(int j=0;j<=i;j++)
{
if((i<2)||(j==0)||(j==i))
v[i][j]=1;
if(i>=2&&j>0&&j<i)
{
v[i][j]=v[i-1][j]+v[i-1][j-1];
}
}
}
return v;
}
};
思路2:
設置一個vec數組來存放每一層的元素,然後用while循環來決定這個二維數組有多少層,用push_back函數將vec數組放入每一層之中,如果每一層的元素超過了2個元素,就用?運算符來判斷哪個元素位置是否超過1,如果超過1,就將這個元素的值變爲這個元素位置當前的值+前一層元素當前位置的值即可。當元素位置等於vec數組最後一個元素位置時,跳到下一層進行賦值。
代碼2:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<int> vec = {1};
vector<vector<int>> res;
while (numRows-- > 0)
{
res.push_back(vec);
for (int i = vec.size() - 1; i >= 1; i--)
vec[i] += (i - 1 >= 0 ? vec[i - 1] : 0);
vec.push_back(1);
}
return res;
}
};