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;
}
相关推荐
liuhuizuikeai3 分钟前
可视化门禁---Linux/Qt+SqLite篇
linux·运维·qt
初願致夕霞20 分钟前
基于系统调用的Linux网络编程——UDP与TCP
linux·网络·c++·tcp/ip·udp
流年如夢1 小时前
栈和列队(LeetCode)
数据结构·算法·leetcode·链表·职场和发展
charlie1145141913 小时前
嵌入式Linux驱动开发——新 API 字符设备驱动完整教程 - 从设备结构体到应用测试
linux·运维·驱动开发
CHANG_THE_WORLD3 小时前
C语言中的 %*s 和 %.*s 和C++的字符串格式化输出
c语言·c++·c#
消失的旧时光-19433 小时前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
SWAGGY..4 小时前
Linux系统编程:(二)基础指令详解
linux·运维·服务器
kdxiaojie4 小时前
U-Boot分析【学习笔记】(3)
linux·笔记·学习
烛衔溟4 小时前
TypeScript 接口继承与混合类型
linux·ubuntu·typescript
2501_931803754 小时前
Go:一门为解决C语言痛点而生的现代语言
c语言·开发语言·golang