[LeetCode-118] 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]
]

Subscribe to see which companies asked this question

解题思路:每一层的第i个位置,等于上一层第i-1与第i个位置之和。

int** generate(int numRows, int** columnSizes, int* returnSize) 
{
    if(numRows<0 ||!columnSizes 
	   ||!(*columnSizes) ||!returnSize)
	   return NULL;
	
	int i,j = 0;
	
	int **columnArray = (int **)malloc(sizeof(int)*numRows);

	if(1==numRows) {
		columnArray[0] = (int *)malloc(sizeof(int));
		columnArray[0][0] = 1;
		return columnArray;
	}
	
	for(i=0;i<numRows;i++) {   /*i:当前行*/
		columnArray[i] = (int *)malloc(sizeof(int)*(i+1));
		
		columnArray[i][0] = 1; /*第一个数为1*/
		
		for(j=1;j<i;j++) {   /*j:当前的列数*/
			columnArray[i][j] = columnArray[i-1][j-1]+columnArray[i-1][j];
		}

		if(i>=1) {
			AllColumnArray[i][j] = 1;/*当前最后一个数也为1*/
		}
	}
		
	return columnArray;
}


这个版本没有通过测试,可能入参没看懂,到底在干嘛。不过功能应该没问题。

C++ 的入参就很清楚了

class Solution {
public:
    vector<vector<int> > generate(int numRows) {
        vector<vector<int> > ret;
        if(numRows == 0)
            return ret;
            
        vector<int> last(1,1);
        ret.push_back(last);
        for(int i = 2; i <= numRows; i ++)
        {// i_th level
            last.push_back(0);
            vector<int> cur = last;
            for(int j = 1; j < i; j ++)
            {
                cur[j] = last[j] + last[j-1];
            }
            ret.push_back(cur);
            last = cur;
        }
        return ret;
    }
};



你可能感兴趣的:([LeetCode-118] Pascal's Triangle(帕斯卡三角形))