[Leetcode] Pascal's Triangle I | II

题目IGiven 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,其他的元素都由上一行两个元素相加得到

vector<vector<int> > generate(int numRows) 
{
	vector<vector<int> > res;
	vector<int> tmp;
		
	if(numRows<1) return  res;

	tmp.push_back (1);
	res.push_back (tmp);

        for(int i=1; i<numRows; i++)
	{
		tmp.clear ();
		tmp.push_back (1);
		for(int j=1; j<i; j++)
		{
			tmp.push_back(res.back ()[j-1]+res.back ()[j]);         //用上一行的两个数相加
		}
		tmp.push_back(1);
		res.push_back (tmp);
	}
	return res;
}


题目II:Given an index k, return the kth row of the Pascal's triangle.

For example, given k = 3,
Return [1,3,3,1].

同时要求O(k)空间复杂度

vector<int> getRow(int rowIndex)
{
    vector<int> a(rowIndex + 1);
         
    a[0] = 1;
    for(int i = 1; i <= rowIndex; i++)
        for(int j = i; j >= 0; j--)
            if (j == i)
            a[j] = a[j-1];
            else if (j == 0)
                a[j] = a[j];
            else
                a[j] = a[j-1] + a[j];	//直接在前一行的基础上扩展
                     
        return a;         
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值