[LeetCode]PASCAL Triangle系列

今天的練習題是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 };
View Code

 

----------------------------------------------------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 };
View Code
相關文章
相關標籤/搜索