Pascal’s Triangle II
Given an index k, return the kth row of the Pascal’s triangle.
For example, given k = 3,
Return [1,3,3,1].
Note:
Could you optimize your algorithm to use only O(k) extra space?
题意:给定一个索引K,返回的帕斯卡三角形K行的值。
for example:
让k = 3, 返回[1,3,3,1]
注意:你可以只使用O(K)的空间来优化你的算法
解题思路:
解题思路:杨辉三角形,
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
可以看出后一项等于前两项之和,若用数组表示,
则a[i][j] = a[i-1][j]+a[i-1][j-1], 同时a[i][0] =1,当i==j时a[i][j]= 1。
难点:对杨辉三角形的理解。
下面为C语言的实现,比较累赘:
/**
* 解题思路:杨辉三角形,
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* 1 5 10 10 5 1
* 1 6 15 20 15 6 1
* 可以看出后一项等于前两项之和,若用数组表示,则a[i][j] = a[i-1][j]+a[i-1][j-1]
* 同时a[i][0] =1,当i==j时a[i][j]= 1。
*/
int *getRow(int rowIndex) {
int pascal[100][100];//初始化一个数组
int *data = (int *)malloc((rowIndex+1)*sizeof(int));//动态分配一个数组
memset(data, 0, (rowIndex+1)*sizeof(int));//清空数组为0
int i,j;
for(i = 0; i <= rowIndex; i++){//循环存储各行的杨辉三角形值,并输把最后一行值返回
for(j = 0; j <= i; j++){
if(j == 0 || j == i) *(data+j) = pascal[i][j] = 1;
else *(data+j) = pascal[i][j] = pascal[i-1][j] + pascal[i-1][j-1];
}
}
return data;
}