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: triangleij = trianglei - 1j - 1 + trianglei - 1j. 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;
}
相关推荐
Championship.23.249 小时前
Linux 3.0 锁机制与故障排查详解
linux·运维·服务器
伊玛目的门徒9 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
天疆说9 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
风123456789~11 小时前
【Linux专栏】ls 排除某个文件
linux·运维·服务器
IT曙光11 小时前
ubuntu apt-get离线源制作
linux·ubuntu
其实防守也摸鱼12 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚12 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
旖-旎13 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
Darkwanderor13 小时前
对Linux的进程控制的研究
linux·运维·c++
bksczm16 小时前
linux之线程概念和控制
linux·开发语言·c++