Pascal's Triangle

来源:互联网 发布:乔巴姆装甲 知乎 编辑:程序博客网 时间:2024/05/18 01:19
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]

]

方法一:

可以将每一行的数字分成两部分。两边都是1,中间的数字是上一行数字的两两之和。注意处理下特殊情况就可以

class Solution {public:    vector<vector<int>> generate(int numRows) {        vector<int>slo;        vector<vector<int>>res;        if(numRows<1)            return res;        slo.push_back(1);        res.push_back(slo);        if(numRows==1)            return res;        int times=1;        while(times<numRows)        {            vector<int>tmp;            tmp.push_back(1);            for(int i=0;i<slo.size()-1;i++)                tmp.push_back(slo[i]+slo[i+1]);            tmp.push_back(1);            res.push_back(tmp);            slo=tmp;            ++times;        }        return res;    }};


方法二:上一种方式每次需要额外申请一个vector向量。可以考虑在原地处理数组

class Solution {public:    vector<vector<int> > generate(int numRows) {        vector<vector<int>> res;        if(numRows<1) return res;        vector<int>slo(1,1);        res.push_back(slo);                for(int i=2; i<=numRows; i++) {            int prev = 1;            for(int j=1; j<i-1; j++) {                int temp = slo[j];                slo[j] += prev;                prev = temp;            }            slo.push_back(1);            res.push_back(slo);        }        return res;    }};



0 0
原创粉丝点击