【LeetCode】118_Pascal's Triangle

题目

Pascal's Triangle

 

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














解析

很简单,下一行第j元素用上一行相同的位置和前一个位置的和即可。需要注意的就是两边都是1

直接上代码

class Solution {
public:
    vector<vector<int>> generate(int numRows){
		vector<vector<int>> ret;
		for (int i = 0;i<numRows;i++)
		{
			vector<int> tmp(i+1);
			tmp[0] = 1;
			tmp[i] = 1;
			for (int j = 1;j<i;j++)
			{
				tmp[j] = ret[i-1][j]+ret[i-1][j-1];
			}
			ret.push_back(tmp);
		}
		return ret;
	}
};

方法挺简单的,可以优化的地方在于其实他是左右对称的,没必要把一行全计算一遍。

看看大神的代码

从左到右

class Solution {
public:
    vector<vector<int>> generate(int numRows){
        vector<vector<int> > result;
        if(numRows == 0) return result;
        result.push_back(vector<int>(1,1)); //first row
        for(int i = 2; i <= numRows; ++i) 
        {
            vector<int> current(i,1); // 本行
            const vector<int> &prev = result[i-2]; // 上一行
            for(int j = 1; j < i - 1; ++j) 
            {
                current[j] = prev[j-1] + prev[j]; // 左上角和右上角之和
            }
            result.push_back(current);
        }
    return result;
	}
};

从右到左

class Solution {
public:
    vector<vector<int>> generate(int numRows){
       vector<vector<int> > result;
       vector<int> array;
        for (int i = 1; i <= numRows; i++) 
        {
            for (int j = i - 2; j > 0; j--) 
            {
                array[j] = array[j - 1] + array[j];
            }
            array.push_back(1);
            result.push_back(array);
        }
        return result;
	}
};











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值