LeetCode //C - 118. Pascal‘s Triangle

118. Pascal's Triangle

Given an integer numRows, return the first numRows of Pascal's triangle.

In Pascal's triangle, each number is the sum of the two numbers directly above it as shown:

Example 1:

Input: numRows = 5
Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

Example 2:

Input: numRows = 1
Output: [[1]]

Constraints:
  • 1 <= numRows <= 30

From: LeetCode

Link: 118. Pascal's Triangle


Solution:

Ideas:

1. Memory Allocation for the Triangle:

The function starts by allocating memory for an array of integer pointers, triangle, which will store the rows of Pascal's Triangle. The size of this array is numRows, each element of which will be a pointer to an array representing a row in the triangle.

2. Memory Allocation for Column Sizes:

It also allocates memory for an array returnColumnSizes that holds the size of each row. This is needed because each row of Pascal's Triangle has a different number of elements. For row i, there will be i + 1 elements.

3. Filling the Triangle:

The function then iterates over each row with two nested loops:

  • The outer loop runs from 0 to numRows - 1, setting up each row.
  • The inner loop runs through each row and calculates the value of each element based on the values from the previous row. The first and last elements of each row are always 1.

4. First and Last Elements:

Within each row, before entering the inner loop, the first element is set to 1. After the inner loop, the last element is also set to 1.

5. Summation Rule:

The key operation occurs inside the inner loop, where each element is the sum of the two elements directly above it from the previous row: triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]. This is the summation rule that defines Pascal's Triangle.

6. Return Values:

Finally, the function sets the returnSize to the number of rows (numRows) to indicate how many rows are in the returned triangle and returns the pointer to the array of arrays, which is Pascal's Triangle.

Code:
c 复制代码
/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** generate(int numRows, int* returnSize, int** returnColumnSizes) {
    // Allocate memory for the array of arrays
    int** triangle = (int**)malloc(numRows * sizeof(int*));
    *returnColumnSizes = (int*)malloc(numRows * sizeof(int));

    for (int i = 0; i < numRows; i++) {
        // Set the return size for each row
        (*returnColumnSizes)[i] = i + 1;

        // Allocate memory for each row
        triangle[i] = (int*)malloc((*returnColumnSizes)[i] * sizeof(int));
        triangle[i][0] = 1; // first element is always 1

        // Set the elements of the triangle
        for (int j = 1; j < i; j++) {
            // Each element equals the sum of the elements above it
            triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
        }

        triangle[i][i] = 1; // last element is always 1
    }

    // Set the return size
    *returnSize = numRows;
    
    return triangle;
}
相关推荐
阿巴~阿巴~18 小时前
JsonCpp:C++ JSON处理利器
linux·网络·c++·json·tcp·序列化和反序列化
ao_lang18 小时前
数据链路层
linux·服务器·网络
z***33518 小时前
【MySQL系列文章】Linux环境下安装部署MySQL
linux·mysql·adb
偶像你挑的噻19 小时前
13-Linux驱动开发-中断子系统
linux·驱动开发·stm32·嵌入式硬件
福尔摩斯张19 小时前
Linux进程间通信(IPC)机制深度解析与实践指南
linux·运维·服务器·数据结构·c++·算法
zore_c19 小时前
【C语言】带你层层深入指针——指针详解2
c语言·开发语言·c++·经验分享·笔记
cookies_s_s19 小时前
项目--协程库(C++)前置知识篇
linux·服务器·c++
不过普通话一乙不改名19 小时前
Linux 网络发包的极致之路:从普通模式到 AF_XDP ZeroCopy
linux·运维·网络
jquerybootstrap20 小时前
大地2000转经纬度坐标
linux·开发语言·python
x***133920 小时前
如何在Linux中找到MySQL的安装目录
linux·运维·mysql