leetcode刷题记录-118. Pascal's Triangle

leetcode刷题记录-118. Pascal’s Triangle

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


2.问题分析

  计算杨辉三角:每个数字等于上一行的左右两个数字之和,即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,根据该原理即可写出程序
  关键点:当N为0时,应该返回一个空的vector[],而不是一个包含空vector的vector[[]];另外在计算每行的元素时,注意首尾元素的处理即可。总的来说比较容易实现。


3.代码实现

vector<vector<int>> generate(int numRows) 
    {

        //杨辉三角的性质:每个数字等于上一行的左右两个数字之和,即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和
        vector<vector<int>>output;
        vector<int> row_vec, lastRow_vec;

        int i, j, n, temp_right, temp_left;

        if (numRows>0)
        {
            row_vec.push_back(1);
            output.push_back(row_vec);
        }

        if (numRows>1)
        {

            for (i = 1; i//生成每行的vector
            {
                lastRow_vec = row_vec;
                row_vec.clear();
                for (j = 0; j <= i; j++)//生成每行的元素
                {
                    temp_left = (j - 1 >= 0) ? lastRow_vec[j - 1] : 0;
                    temp_right = (j <= i-1) ? lastRow_vec[j] : 0;
                    //       temp=j>lastRow_vec[j]+lastRow_vec[j-1];
                    row_vec.push_back(temp_left + temp_right);
                }
                output.push_back(row_vec);
            }

        }
        return output;
    }

你可能感兴趣的:(leetcode,cpp)