题目如下:
点此读题

[LeetCode]杨辉三角
这题没有别的要求,输入一个数后将其按杨辉三角的形式打出。既然题目已经提到了杨辉三角的形成过程,那我也不客气,直接照着用就是
当numRows==0,1,2时是特殊情况,先列举出来:

		if(numRows == 0) return yanghui;
        
        //num == 1
        vector<int> v;
        v.push_back(1);
        yanghui.push_back(v);
        if(numRows == 1) return yanghui;
        
        //num == 2
        vector<int> v2;
        v2.push_back(1);
        v2.push_back(1);
        yanghui.push_back(v2);
        if(numRows == 2) return yanghui;

底子打好之后就可以往上建塔,逻辑也不是很复杂,就利用杨辉三角的原理,每一个数组第一个和最后一个元素都是1,其余的分别对应上一个数组元素两两之和:

		//num > 2
        for(int i = 2; i < numRows; i++){
            vector<int> vn;
            vn.push_back(1);
            for(int j = 1; j <= i - 1; j++)
                vn.push_back(yanghui[i - 1][j - 1] + yanghui[i - 1][j]);
            vn.push_back(1);
            yanghui.push_back(vn);
        }
        return yanghui;

总体代码:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> yanghui;
        
        if(numRows == 0) return yanghui;
        
        //num == 1
        vector<int> v;
        v.push_back(1);
        yanghui.push_back(v);
        if(numRows == 1) return yanghui;
        
        //num == 2
        vector<int> v2;
        v2.push_back(1);
        v2.push_back(1);
        yanghui.push_back(v2);
        if(numRows == 2) return yanghui;
        
        //num > 2
        for(int i = 2; i < numRows; i++){
            vector<int> vn;
            vn.push_back(1);
            for(int j = 1; j <= i - 1; j++)
                vn.push_back(yanghui[i - 1][j - 1] + yanghui[i - 1][j]);
            vn.push_back(1);
            yanghui.push_back(vn);
        }
        return yanghui;
    }
};

相关文章: