zoukankan      html  css  js  c++  java
  • [LeetCode]PASCAL Triangle系列

    今天的练习题是triangle三件套:Triangle, PASCAL Triangle, PASCAL Triangle II. 

    PASCAL Triangle就是小学奥数中的“杨辉三角”, 存在如下关系

    triangle[i+1][j+1] = triangle[i][j]+triangle[i][j+1]

    即第i+1行第j+1个元素为第i行第j个元素与第j+1个元素之和

    PASCAL Triangle的题目要求:输出PASCAL Triangle的前numRows行

    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]
    ]

    根据生成规则,一个vector指向当前行,一个vector指向上一行,注意边界位置的下标不要越界

     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

    ----------------------------------------------------

    PASCAL Triangle II

    与上一题类似,输出第rowIndex行PASCAL Triangle. 

    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
  • 相关阅读:
    自动化测试工具Telerik Test Studio发布R1 2019|附下载
    DevExpress ASP.NET Core Controls v18.2新功能详解
    DevExpress WinForms使用教程:Diagram Control
    JDK1.8源码——java.util.Arrays 类
    JDK1.8源码——java.util.HashMap 类
    哈希表
    JDK1.8源码——java.lang.String 类
    HDU1811 Rank of Tetris (并查集)
    CF149D Coloring Brackets (区间dp)
    POJ2464 Brownie Points II(树状数组+思维)
  • 原文地址:https://www.cnblogs.com/practice/p/3394458.html
Copyright © 2011-2022 走看看