C语言118. 杨辉三角

给定一个非负整数 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)

#include <stdio.h>
int main()
{
int i ,j,row ;
int a[100][100]={0};
printf("请输入行数:");
scanf("%d",&row);
for(i=0;i<row;i++)
{
for(j=0;j<i+1;j++)
{
if(j==0||j==i)
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
printf("%d ",a[i][j]);
}
printf("\n");
}
}

下面是力扣上的解法:哎指针的指针实在令人头大,还得多加看看

int** generate(int numRows, int* returnSize, int** returnColumnSizes){

*returnSize = numRows;//returnSize是指向一个整数的指针,表示返回杨辉三角的行数 = 输入numRows

*returnColumnSizes = (int*)malloc(numRows * sizeof(int));//returnColumnSizes是指向一个数组的指针,数组元素为对应行的元素个数

int **res = (int**)malloc((*returnSize) * sizeof(int*));//res是一个指针,它指向的是由指针构成的数组,每个指针都指向对应的三角的一行数;res也是二维数组

int i = 0;

for(; i < *returnSize; i++){

(*returnColumnSizes)[i] = i + 1;

res[i] = (int*)malloc((*returnColumnSizes)[i] * sizeof(int));

res[i][0] = 1;

res[i][i] = 1;

}

for(i = 2; i <= numRows - 1; i++){

for(int j = 1; j < i; j++){

res[i][j] = res[i - 1][j - 1] + res[i - 1][j];

}

}

return res;

}

首先,你看这个for循环,是为了给杨辉三角的两条边上的元素赋值1的。 (*returnColumnSizes)[i] = i + 1; 是为了给出对应行上元素的个数,

res[i] = (int*)malloc((*returnColumnSizes)[i] * sizeof(int));然后按照元素个数分配存储空间。 然后再赋值每一行的首位两个元素值为1.

原文地址:https://www.cnblogs.com/cocobear9/p/12324374.html

时间: 2024-10-08 21:30:42

C语言118. 杨辉三角的相关文章

C语言打印杨辉三角(2种方法)

杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一.在高中的时候我们又知道,杨辉三角的任意一行都是的二项式系数,n为行数减1.也就是说任何一个数等于这个是高中的组合数.n代表行数减1,不代表列数减1.如:第五行的第三个数就为=6. 现在我们按第一种思路来写:先定义一个二维数组:a[N][N],略大于要打印的行数.再令两边的数为1,即当每行的第一个数和

Leecode刷题之旅-C语言/python-118杨辉三角

/* * @lc app=leetcode.cn id=118 lang=c * * [118] 杨辉三角 * * https://leetcode-cn.com/problems/pascals-triangle/description/ * * algorithms * Easy (60.22%) * Total Accepted: 17.6K * Total Submissions: 29.2K * Testcase Example: '5' * * 给定一个非负整数 numRows,生成

118. 杨辉三角

118. 杨辉三角 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] class Solution { public List<List<Integer>> generate(int row) { List<List<Integer>> lists = new L

用C语言编写杨辉三角

今天给大家带来用C语言在屏幕上输出杨辉三角 杨辉三角: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 思路:主要用到循环和数组的知识,今天就以for循环为例,给大家输出10行的杨辉三角.我们需要定义一个二维数组(a[][]),我们知道数组是从零开始的,所以第一行第一个是a[0][0],通过观察我们发现:第一列所有的数字都是1,即就是a[i][0]=1,i表示任何数字.我们还可以看出,当行数和列数相等时,该位的数字也为1,即就是a[i][i]=1,杨辉三角中间的数字规律是:从第三行开

LeetCode【118. 杨辉三角】

首先,这个杨辉三角用C语言很好写,关键就在于明白,第一个与最后一个永远是1,同时,第三行开始,中间的数就是上方两个相加. a[ i ][ j ] = a[ i - 1 ][ j - 1 ]+a[ i - 1 ][ j ] 对于JAVA List< List<Integer> > res = new ArrayList< List<Integer> >(); List<Integer> t = new ArrayList<>(); Li

【C语言】杨辉三角

#include<stdio.h> int main() { int a[20][20] = { 0 }; int n = 0, i = 0, j = 0; printf("杨辉三角\n\n"); printf("请输入一个自然数:"); scanf_s("%d", &n); for (i = 0; i < n;i++) a[i][0] = 1; for (i = 1; i < n; i++) for (j = 1

leetcode 118 杨辉三角 python

杨辉三角 一开始自己使用的方法 1 class Solution: 2 def generate(self, numRows): 3 """ 4 :type numRows: int 5 :rtype: List[List[int]] 6 """ 7 if numRows == 0: 8 return [] 9 elif numRows == 1: 10 return [[1]] 11 elif numRows == 2: 12 return [

C语言复习---杨辉三角打印

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> #define MAX 8 int main() { int a[MAX][MAX] = { 0 }; for (int i = 0; i < MAX; i++) { a[i][0] = 1; a[i][i] = 1; if (i>=2) for (int j = 1; j <

Go语言:打印杨辉三角

杨辉三角的样式如下: 1 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,而其它元素等于它上方"肩膀"上的两个元素之和. 使用Go语言打印杨辉三角: package test import ( "fmt" ) //行数 const LINES int = 8 //杨辉三角 func ShowYangHuiTri