0
点赞
收藏
分享

微信扫一扫

作文以记之 ~ 杨辉三角

圣杰 2022-04-08 阅读 95

作文以记之 ~ 杨辉三角

0、前言

本篇博客利用C++实现了杨辉三角的生成,这个也是力扣上的一道题,具体题目内容可 点击此处 进行查看!具体代码实现可 点击此处 进行查看!

1、题目描述

在这里插入图片描述

2、解题思路

2.1 方法1 ~ 利用嵌套循环

2.1.1 思路

此思路主要是根据杨辉三角的生成规律,通过基于设定好的第一行和第二行的值去逐层生成其他数。此种规律可总结为:

当设定好第一行以及每一行的首尾两数后,则下一行或者本行的数据(不包括第一行和第二行)可以表示为 ans[i][j] = ans[i - 1][j - 1] + ans[i - 1][j]; – 其中i为行数,j为第几个数。

具体可根据下述代码进行分析!

2.1.2 程序代码

#include<iostream>
#include<vector>
using namespace std;

void shownums(vector<vector<int>>& nums)
{
	for (int i = 0; i < nums.size(); i++)
	{
		for (int j = 0; j < nums[i].size(); j++)
		{
			cout << nums[i][j] << " ";
		}cout << endl;
	}cout << endl;
}

//写法一
vector<vector<int>> generate(int numRows) 
{
	vector<vector<int>> ans;
	for (int i = 0; i < numRows; ++i)  
		ans.push_back(vector<int>(i+1,0));
	ans[0][0] = 1;
	for (int i = 1; i < numRows; i++)
	{
		ans[i][0] = 1; ans[i][i] = 1;
		for (int j = 1; j < i; j++)
		{
			ans[i][j] = ans[i - 1][j - 1] + ans[i - 1][j];
		}
	}
	return ans;
}

//写法二
//vector<vector<int>> generate(int numRows) 
//{
//	vector<vector<int>> ans(numRows);
//	for (size_t i = 0; i < numRows; i++)
//	{
//		ans[i].resize(i + 1, 0);
//		ans[i][0] = 1;
//		ans[i][i] = 1;
//	}
//	for (size_t i = 0; i < ans.size(); i++)
//	{
//		for (size_t j = 0; j < ans[i].size(); j++)
//		{
//			if (ans[i][j] == 0)
//			{
//				ans[i][j] = ans[i - 1][j - 1] + ans[i - 1][j];
//			}
//		}
//	}
//	return ans;
//}

void test()
{
	int n = 5;
	cout << "\n生成的杨辉三角:\n";
	shownums(generate(n));
}

int main()
{
	test();
	system("pause");
	return 0;
}

:上述代码中提供了两种写法,这两种的主要区别在于生成目标数组ans时的方法不一样,一个是一开始就设定好了数组每行的个数,一个是分别设定的~

2.1.3 运行结果

程序中所给杨辉三角的行数为 5,其生成的杨辉三角如下图:
在这里插入图片描述

2.2 其他方法

生成杨辉三角还有其他的方法,比如利用数学方法,此方法具体内容可 点击此处 进行查看!后续有时间再对其进行补充!

3、总结

整篇内容就是说明了如何利用程序生成杨辉三角,没有特别需要注意的知识点!

举报

相关推荐

leetcode之杨辉三角

Python之杨辉三角

杨辉三角.java

杨辉三角(Java)

杨辉三角算法

leetcode:杨辉三角

杨辉三角(java)

杨辉三角展示

0 条评论