今天的練習題是triangle三件套:Triangle, PASCAL Triangle, PASCAL Triangle II. ide
PASCAL Triangle就是小學奧數中的「楊輝三角」, 存在以下關係spa
triangle[i+1][j+1] = triangle[i][j]+triangle[i][j+1]
即第i+1行第j+1個元素爲第i行第j個元素與第j+1個元素之和3d
PASCAL Triangle的題目要求:輸出PASCAL Triangle的前numRows行code
Given numRows, generate the first numRows of Pascal's triangle.blog
For example, given numRows = 5,
Returnget[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
根據生成規則,一個vector指向當前行,一個vector指向上一行,注意邊界位置的下標不要越界io
1 class Solution { 2 public: 3 vector<vector<int> > generate(int numRows) { 4 // IMPORTANT: Please reset any member data you declared, as 5 // the same Solution instance will be reused for each test case. 6 7 vector<vector<int>> triangle; 8 if(numRows<1) 9 return triangle; 10 11 vector<int> prev(1, 1); // [1] 12 vector<int> cur; 13 triangle.push_back(prev); 14 15 for(int i=1; i<numRows; ++i) 16 { 17 for(int j=0; j<i+1; ++j) 18 { 19 int left = j>0?prev[j-1]:0; //注意下標爲0的位置 20 int right = j<i?prev[j]:0; //注意下標爲i的位置 21 cur.push_back(left+right); 22 } 23 triangle.push_back(cur); 24 prev = cur; 25 cur.clear(); 26 } 27 28 return triangle; 29 } 30 };
----------------------------------------------------event
PASCAL Triangle IIclass
與上一題相似,輸出第rowIndex行PASCAL Triangle. test
N行的三角形,注意rowIndex的取值範圍爲[0, N-1]
原題
Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1]
.
代碼
1 class Solution { 2 public: 3 vector<int> getRow(int rowIndex) { 4 // IMPORTANT: Please reset any member data you declared, as 5 // the same Solution instance will be reused for each test case. 6 vector<int> prev(1, 1); 7 8 if(rowIndex<1) 9 return prev; 10 11 vector<int> row; 12 for(int i=1; i<rowIndex+1; ++i) 13 { 14 for(int j=0; j<i+1; ++j) 15 { 16 int left = j>0?prev[j-1]:0; 17 int right = j<i?prev[j]:0; 18 row.push_back(left+right); 19 } 20 prev = row; 21 row.clear(); 22 } 23 24 return prev; 25 } 26 };