C++杨辉三角(初学)

01

C++的
杨辉三角之
第一个版本–就是最基础的,输入行数,输出打印的图形。话不多说,代码如下:

#include <iostream>
using namespace std;
int main()
{
    int num;         //代表着要打印的行数
    cin >> num;      //输入行数
    int a[num][num]; //定义一个二维数组,但是打印的时候只打印一部分,不是打印全部
    int i, j;        //i代表行,j代表列
    for (i = 0; i < num; i++)
    {
        for (j = 0; j <= i; j++)
        {
            if (j == 0 || i == j)
                a[i][j] = 1;
            //如果是第一列或者是每一行中行数与列数相等的那一列
            else
            {
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
                //该行列的数字为上上一行的左下方和右下方的数字之和
            }
            cout << a[i][j] << " "; //在每一个输出之间加空格
        }
        cout << endl; //在每一行之后输出一个换行符,
        //所以是在第一个for循环外,第二个for循环内输出换行符
    }
    return 0;
}

输出的结果:(如图)
在这里插入图片描述

02

C++的
杨辉三角之
第二个版本,将杨辉三角的输出变化一下。
先贴出结果:
在这里插入图片描述
(不知道为什么图片里面有字啊…意思就是这么个意思)
像这样的图形,其实就是在每一行输出之前先输出空格即可。
代码如下:

#include <iostream>
using namespace std;
int main()
{
    int num;         //代表着要打印的行数
    cin >> num;      //输入行数
    int a[num][num]; //定义一个二维数组,但是打印的时候只打印一部分,不是打印全部
    int i, j;        //i代表行,j代表列
    for (i = 0; i < num; i++)
    {
        if (i != num) //在每一行输出之前判断是否是num,若不是num,则根据数学规律,输出空格
        {
            for (int k = num - i - 1; k > 0; k--)
                cout << " ";
        }
        for (j = 0; j <= i; j++)
        {
            if (j == 0 || i == j)
                a[i][j] = 1;
            //如果是第一列或者是每一行中行数与列数相等的那一列
            else
            {
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
                //该行列的数字为上上一行的左下方和右下方的数字之和
            }

            cout << a[i][j] << " "; //在每一个输出之间加空格
        }
        cout << endl; //在每一行之后输出一个换行符,
        //所以是在第一个for循环外,第二个for循环内输出换行符
    }
    return 0;
}

第二次改进的时候,我以5行举例,列出来一个数学公式,如图:
左边用圆圈划起来的是空格的个数
(图中左边用圆圈划起来的是空格的个数)
那么根据该图便可知一个求出空格的个数的公式,即第i行要有num - i - 1个空格(i是从0开始)。

03

在Leetcode上也有一个杨辉三角(118题)如图
在这里插入图片描述
在这里插入图片描述
接下来,就要想思路。
一开始,我不知道vector是什么意思,后来,发现,vector<vector>arr(10) 的意思是10行的一个以arr为首地址的int类型二维数组。
那么搞懂了这个之后解题就比较轻松了。
先看如果输入的numRows是0,直接返回一个空的数组。如果不是0,那么按照本文前两个的杨辉三角的思路,可以写出代码,不同的是,本题中没有要用到cout,而是直接返回这个数组。
话不多说,代码如下:
在这里插入图片描述
我这个答案的时间复杂度较低,但是空间复杂度较高,还是有待改进的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值