【Leetcode-118. 杨辉三角 -119. 杨辉三角Ⅱ】

Leetcode

  • Leetcode-118. 杨辉三角
  • Leetcode-119. 杨辉三角Ⅱ

Leetcode-118. 杨辉三角

题目:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

我们的思路是开辟一个二维数组的空间,然后根据题目要求把数据填进去,返回该二维数组的地址;注意,在二维数组中的一维数组也要开辟空间;

		int** generate(int numRows, int* returnSize, int** returnColumnSizes)
		{
		    //开辟二维数组的空间,返回的空间
		    int** ret = (int**)malloc(sizeof(int*) * numRows);
		
		    //返回的二维数组的行数
		    *returnSize = numRows;
		
		    //开辟返回的二维数组的列数
		    *returnColumnSizes = (int*)malloc(sizeof(int) * numRows);
		
		    for (int i = 0; i < numRows; i++)
		    {
		        //为第i行开辟的空间大小
		        ret[i] = (int*)malloc(sizeof(int) * (i + 1));
		
		        //第i行数组的大小
		        (*returnColumnSizes)[i] = i + 1;
		
		        //首位置1
		        ret[i][0] = 1;
		        ret[i][i] = 1;
		
		        //除了首尾的位置等于上面两项之和
		        for (int j = 1; j < i; j++)
		        {
		            ret[i][j] = ret[i - 1][j - 1] + ret[i - 1][j];
		        }
		    }
		    //返回二维数组
		    return ret;
		}

Leetcode-119. 杨辉三角Ⅱ

题目:给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
输入: rowIndex = 3
输出 : [1, 3, 3, 1]

这里的思路跟上面的相似,不同的是,这题不用返回该二维数组,只是返回某一行,所以只需要开辟每一行的空间即可,最后返回符合题意的行的地址即可;

		int* getRow(int rowIndex, int* returnSize)
		{
		    //返回行数
		    *returnSize = rowIndex + 1;
		    //创建一个二维数组
		    int* ret[rowIndex + 1];
		    int i, j;
		    for (i = 0; i < rowIndex + 1; i++)
		    {
		        //为第i行开辟空间
		        ret[i] = (int*)malloc(sizeof(int) * (i + 1));
		
		        //首尾置1
		        ret[i][0] = 1;
		        ret[i][i] = 1;
		
		        for (j = 1; j < i; j++)
		        {
		            ret[i][j] = ret[i - 1][j - 1] + ret[i - 1][j];
		        }
		    }
		    //返回相应的行
		    return ret[rowIndex];
		}

你可能感兴趣的:(leetcode,c语言)