【杨辉三角】Leetcode118和119题

杨辉三角:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在这里插入图片描述
实例:

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

解题思路:

动态规划:如果能够知道一行杨辉三角,我们就可以根据每对相邻的值轻松地计算出它的下一行。而因为每一行的数组大小不同,因此要动态分配内存,用到malloc函数

代码:

	/**
 * Return an array of arrays of size *returnSize.      返回一个大小为*returnsize的数组组成的数组
 * The sizes of the arrays are returned as *returnColumnSizes array.  数组的大小返回为*returnCOlumnsizes
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().   返回的数组和*columnSizes数组都必须用malloc分配内存,
 */
int** generate(int numRows, int* returnSize, int** returnColumnSizes){
    int  **yanghui;   //定义二级指针
    *returnSize = numRows;   //行数
    *returnColumnSizes = (int *)malloc(sizeof(int)*numRows);//returnColumnSizes储存杨辉三角每一行元素的个数
    yanghui = (int**)malloc(sizeof(int*)*numRows);   //动态分配内存
    
    for (int i = 0; i < numRows; i++) {
        (*returnColumnSizes)[i] = i+1;  //数组returncolumnsizes的元素元素为索引值加一
        yanghui[i] = (int*)malloc(sizeof(int)*(i+1));   //为杨辉数组动态分配内存
        yanghui[i][0] = 1;  //初始化
        yanghui[i][i] = 1;   //初始化
        for (int j = 1; j < i; j++) {
            yanghui[i][j] = yanghui[i-1][j] + yanghui[i-1][j-1]; //递归
        }
    }
    return yanghui;
}	

杨辉三角Ⅱ:给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

方法一:

int* getRow(int rowIndex, int* returnSize)
{
yanghui[][]={
            {1,1},
            {1,2,1},
            {1,3,3,1},
            {1,4,6,4,1},
            {1,5,10,10,5,1},
            {1,6,15,20,15,6,1},
            {1,7,21,35,35,21,7,1},
            {1,8,28,56,70,56,28,8,1},
            {1,9,36,84,126,126,84,36,9,1},
            {1,10,45,120,210,252,210,120,45,10,1},
            {1,11,55,165,330,462,462,330,165,55,11,1},
            {1,12,66,220,495,792,924,792,495,220,66,12,1},
            {1,13,78,286,715,1287,1716,1716,1287,715,286,78,13,1},
            {1,14,91,364,1001,2002,3003,3432,3003,2002,1001,364,91,14,1},
            {1,15,105,455,1365,3003,5005,6435,6435,5005,3003,1365,455,105,15,1},
            {1,16,120,560,1820,4368,8008,11440,12870,11440,8008,4368,1820,560,120,16,1},
            {1,17,136,680,2380,6188,12376,19448,24310,24310,19448,12376,6188,2380,680,136,17,1},
            {1,18,153,816,3060,8568,18564,31824,43758,48620,43758,31824,18564,8568,3060,816,153,18,1},
            {1,19,171,969,3876,11628,27132,50388,75582,92378,92378,75582,50388,27132,11628,3876,969,171,19,1},
            {1,20,190,1140,4845,15504,38760,77520,125970,167960,184756,167960,125970,77520,38760,15504,4845,1140,190,20,1},
            {1,21,210,1330,5985,20349,54264,116280,203490,293930,352716,352716,293930,203490,116280,54264,20349,5985,1330,210,21,1},
            {1,22,231,1540,7315,26334,74613,170544,319770,497420,646646,705432,646646,497420,319770,170544,74613,26334,7315,1540,231,22,1},
            {1,23,253,1771,8855,33649,100947,245157,490314,817190,1144066,1352078,1352078,1144066,817190,490314,245157,100947,33649,8855,1771,253,23,1},
            {1,24,276,2024,10626,42504,134596,346104,735471,1307504,1961256,2496144,2704156,2496144,1961256,1307504,735471,346104,134596,42504,10626,2024,276,24,1},
            {1,25,300,2300,12650,53130,177100,480700,1081575,2042975,3268760,4457400,5200300,5200300,4457400,3268760,2042975,1081575,480700,177100,53130,12650,2300,300,25,1},
            {1,26,325,2600,14950,65780,230230,657800,1562275,3124550,5311735,7726160,9657700,10400600,9657700,7726160,5311735,3124550,1562275,657800,230230,65780,14950,2600,325,26,1},
            {1,27,351,2925,17550,80730,296010,888030,2220075,4686825,8436285,13037895,17383860,20058300,20058300,17383860,13037895,8436285,4686825,2220075,888030,296010,80730,17550,2925,351,27,1},
            {1,28,378,3276,20475,98280,376740,1184040,3108105,6906900,13123110,21474180,30421755,37442160,40116600,37442160,30421755,21474180,13123110,6906900,3108105,1184040,376740,98280,20475,3276,378,28,1},
            {1,29,406,3654,23751,118755,475020,1560780,4292145,10015005,20030010,34597290,51895935,67863915,77558760,77558760,67863915,51895935,34597290,20030010,10015005,4292145,1560780,475020,118755,23751,3654,406,29,1},
            {1,30,435,4060,27405,142506,593775,2035800,5852925,14307150,30045015,54627300,86493225,119759850,145422675,155117520,145422675,119759850,86493225,54627300,30045015,14307150,5852925,2035800,593775,142506,27405,4060,435,30,1},
            {1,31,465,4495,31465,169911,736281,2629575,7888725,20160075,44352165,84672315,141120525,206253075,265182525,300540195,300540195,265182525,206253075,141120525,84672315,44352165,20160075,7888725,2629575,736281,169911,31465,4495,465,31,1},
            {1,32,496,4960,35960,201376,906192,3365856,10518300,28048800,64512240,129024480,225792840,347373600,471435600,565722720,601080390,565722720,471435600,347373600,225792840,129024480,64512240,28048800,10518300,3365856,906192,201376,35960,4960,496,32,1},
            {1,33,528,5456,40920,237336,1107568,4272048,13884156,38567100,92561040,193536720,354817320,573166440,818809200,1037158320,1166803110,1166803110,1037158320,818809200,573166440,354817320,193536720,92561040,38567100,13884156,4272048,1107568,237336,40920,5456,528,33,1}
        };
return   yanhui[RowIndex];
}

方法二:


int* getRow(int rowIndex, int* returnSize) {
    int i,j;
    *returnSize = rowIndex + 1;
    int* yanghui = (int*) malloc ((rowIndex + 1) * sizeof(int));
    for( i= 0;i <= rowIndex;i++)
        for(j = i;j >= 0;j--)
        {
            if(j == 0 || j == i)
                yanghui[j] = 1;
            else
                yanghui[j] = yanghui[j] + yanghui[j-1];
        }
    return yanghui;
}

声明:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle
著作权归领扣网络所有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值