Leetcode 118 根据行数输出杨辉三角形

题意:给定总行数numrows,输出所有行的 杨辉三角形

题解:

   0:1

            1:1    1

            2:1    2    1

            3:1    3    3    1

            4:1    4    6    4     1

            5:1    5   10   10   5      1

我们知道a[i][j]=a[i-1][j]+a[i-1][j-1],那么我们可以按照顺序设计一个vector<vector<int>> 相当于二维数组,依次将数据更新完。

代码:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {

        vector<vector<int>> r(numRows);
        if(numRows == 0) return r;

        r[0].push_back(1);
        for(int i = 1; i < numRows; i ++)
        {
            r[i].push_back(1);
            for(int j = 1; j < i; j ++)
                r[i].push_back(r[i-1].at(j-1) + r[i-1].at(j));
            r[i].push_back(1);
        }  
        return r;
    }
};
也可以按照上一篇的思路:
class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<int> vec(numRows, 1);
    	vector<vector<int>> vvec(numRows);
    	
    	int i = 0, j = 0;
    	for (i = 1; i <= numRows;i++){
    		vvec[i-1]=(vector<int>(i));
    	}
    	for (i = 0; i < numRows; i++){
    		vvec[i][0] = 1;
    	}
    	if(numRows==0||numRows==1){
            return vvec;   
        }
    	vvec[1][1] = 1;
    	for (i = 2; i < numRows; i++){
    		for (j = i; j>0; j--){
    			if (i == j || j == 0){
    				vec[j] = 1;
    			}
    			else{
    				vec[j] = vec[j] + vec[j - 1];
    			}
    			vvec[i][j] = vec[j];
    		}
    	}
    	return vvec;
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值