来源:力扣(LeetCode)
链接:118. 杨辉三角 - 力扣(LeetCode) (leetcode-cn.com)
一、思路分析
- 一维数组实现 c语言
很麻烦!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void yh(int n)
{
int i = 0;
int j = 0;
int sum = 0;
int num = 1;//防止还完数字后,后面那个数字还需要用上面的数字
int a[20] = { 0 };//保留上一行所需要
/*
1
1 1 2
1 2 1 3
1 3 3 1 4
1 4 6 4 1 5
1 5 10 10 5 1 6
1 6 15 20 15 6 1 7
*/
for (i = 0; i < n; i++)//一共i行
{
for (j = 0; j < (i + 1); j++)//每行j个数字
{
if (j == 0 || j == i)
{
printf("%2d ", 1);
a[j] = 1;//a[0] =1
}
else
{
sum = a[j] + num;
num = a[j];
printf("%2d ", sum);
a[j] = sum;
}
}
printf("\n");//一行结束
}
}
int main()
{
//打印杨辉三角直到n行
int n = 0;
scanf("%d", &n);
//打印杨辉三角函数
yh(n);
}
- 二维数组实现
如果用c语言
动态开辟二维数组 M行N列
int** p = (int**)malloc(sizeof(int*) * M);
for(size_t i = 0; i < N; i++)
{
p[i] = (int*)malloc(sizeof(int) * N);
}
c++
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> vv;
//开辟 numRows 个 int*
vv.resize(numRows);
//给每个数组分配行
for(size_t i = 0; i < numRows; i++)
{
vv[i].resize(i + 1);
vv[i][0] = vv[i][vv[i].size() - 1] = 1;
}
//建立一个二维数组
/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
*/
for(size_t i = 0; i < numRows; i++)
{
for(size_t j = 0; j < vv[i].size(); j++)
{
if(vv[i][j] == 0)
{
vv[i][j] = vv[i-1][j-1] + vv[i-1][j];
}
}
}
return vv;
}
};