leetcode118题 题解 翻译 C语言版 Python版
2016-04-17 14:26
513 查看
118. Pascal's Triangle
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
118.帕斯卡三角形
给定一个行数numRows,生成一个对应的帕斯卡三角形
举个例子,给定numRows=5,
返回
思路:逐行分配内存空间,对第i行来说首尾填1,然后中间的各数由上一行对应位置的两数相加即可得到。整个过程较为简单。需要注意的是c语言版中函数提供的参数的理解。函数头如下:
int** generate(int numRows, int** columnSizes)
最后返回一个二级指针表示存储的三角形,这里可以一次性分配全部的内存,也可以逐行分配使得内存不连在一起。由于每行的长度是事先不确定的,所以需要我们来计算并返回,这就体现在columnSizes中。本来各行长度连起来应该是一个一维数组,也就是说在函数中我们只需要定义一个int*型变量并malloc这么一个一维数组,即可记录各行的长度。但是如果我们要通过指针的方式将其地址传出函数,那么就要再来一层指针,也就是变成了二级指针int**。具体使用中一直使其以*columnSizes的形式出现即可。
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] ]
118.帕斯卡三角形
给定一个行数numRows,生成一个对应的帕斯卡三角形
举个例子,给定numRows=5,
返回
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
思路:逐行分配内存空间,对第i行来说首尾填1,然后中间的各数由上一行对应位置的两数相加即可得到。整个过程较为简单。需要注意的是c语言版中函数提供的参数的理解。函数头如下:
int** generate(int numRows, int** columnSizes)
最后返回一个二级指针表示存储的三角形,这里可以一次性分配全部的内存,也可以逐行分配使得内存不连在一起。由于每行的长度是事先不确定的,所以需要我们来计算并返回,这就体现在columnSizes中。本来各行长度连起来应该是一个一维数组,也就是说在函数中我们只需要定义一个int*型变量并malloc这么一个一维数组,即可记录各行的长度。但是如果我们要通过指针的方式将其地址传出函数,那么就要再来一层指针,也就是变成了二级指针int**。具体使用中一直使其以*columnSizes的形式出现即可。
/** * Return an array of arrays. * The sizes of the arrays are returned as *columnSizes array. * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free(). */ int** generate(int numRows, int** columnSizes) { *columnSizes = (int*)malloc(sizeof(int)*numRows); int** triangle = (int**)malloc(sizeof(int*)*numRows); for (int i = 0; i < numRows; i++){ (*columnSizes)[i] = i + 1; triangle[i] = (int*)malloc(sizeof(int)*(i+1)); triangle[i][0] = triangle[i][i] = 1; for (int j = 1; j < i; j++){ triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]; } } return triangle; }
class Solution(object): def generate(self, numRows): """ :type numRows: int :rtype: List[List[int]] """ triangle = [] for i in range(numRows): row = [1] if i == 0: triangle.append(row) continue for j in range(1, i): num = triangle[i-1][j-1] + triangle[i-1][j] row.append(num) row.append(1) triangle.append(row) return triangle
相关文章推荐
- [LeetCode]206. Reverse Linked List
- C++ map
- 解决C、C++程序执行结果一闪而过的方法---system("pause")、getchar()、cin.get()
- [LeetCode]2. Add Two Numbers
- c/c++的|、||、&、&&、异或、~、!运算
- C++编译器为空类“润物细无声”地做些什么
- c++ initialize_list
- 最长01子串
- localtime和gmtime函数使用
- C++中各种类的大小
- VC++动态链接库(DLL)编程深入浅出(四) 出处:PConline
- 时间片轮转调度算法的C语言模拟实现
- 《Accelerated C++》前面部分笔记
- 钱能c++第9章以前的笔记
- C++编程基础笔记章节八
- A率13折线PCM编码的C语言实现
- c语言之模拟实现求子串(strstr)函数
- [LeetCode]137. Single Number II
- C++编程基础笔记章节七
- K-Means算法的C语言实现