給定一個行數字,生成它的帕斯卡三角形。
例如,給定numRows = 5,
返回:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
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]
]
這道題可能我寫的太不簡潔了,不過意思算是表達清楚了。
首先定義pascal,行數小於1的話就直接返回了。
vector> pascal;
if (numRows < 1) return pascal;
然後進一步操作,添加一個值為[1]的vector到pascal裡,如果行數為1此時就直接返回了。如果不為1就繼續執行下一步。
vector root;
root.push_back(1);
pascal.push_back(root);
if (numRows == 1) return pascal;
看上去和上一步差不多,不過正是借用了上一步中保存的1,這時候root裡面已經有兩個1了。
root.push_back(1);
pascal.push_back(root);
if (numRows == 2) return pascal;
因為我主要是只想操作第n行的中間數字,開頭和結尾直接設定成1了。中間部分的話利用上一行的數據來生成就好了。
if (numRows > 2) {
for (int i = 2; i < numRows; ++i) {
vector temp;
temp.push_back(1);
for (int j = 1; j < pascal[i - 1].size(); ++j) {
temp.push_back(pascal[i - 1][j - 1] + pascal[i - 1][j]);
}
temp.push_back(1);
pascal.push_back(temp);
}
return pascal;
}
剛才復制代碼的時候發現我沒去LeetCode提交,突然有點慌上面直接寫的代碼會不會有錯,結果一提交還對了。
class Solution {
public:
vector> generate(int numRows) {
vector> pascal;
if (numRows < 1) return pascal;
vector root;
root.push_back(1);
pascal.push_back(root);
if (numRows == 1) return pascal;
root.push_back(1);
pascal.push_back(root);
if (numRows == 2) return pascal;
if (numRows > 2) {
for (int i = 2; i < numRows; ++i) {
vector temp;
temp.push_back(1);
for (int j = 1; j < pascal[i - 1].size(); ++j) {
temp.push_back(pascal[i - 1][j - 1] + pascal[i - 1][j]);
}
temp.push_back(1);
pascal.push_back(temp);
}
return pascal;
}
}
};