【笔试】算法的暴力美学——牛客 BC140:杨辉三角

一、题目描述

二、算法原理

思路:根据题目要求:每个数 = 左上方 + 上方的值的和,那么我们简单模拟就行了;

1)创建一个二维数组

2)先把第一个数字 1 入到二维数组中,以他为基准,让下面的数字不断的计算

3)不断的根据题目的要求计算当前的数字,每个数 = 左上方 + 上方的值的和,当我们计算出来的值等于 0 就没有必要入二维数组了,在杨辉三角中的值是没有等于 0 的;注意:当前我们只要计算出来杨辉三角的值就行了,不要注意格式输出;

4)控制格式输出,我们把杨辉三角的值转成 string ,当这个 string 的长度小于 5 时,就计算题目的长度差:5 - string.size();往 string 补充长度差个的空格;

三、代码实现

cpp 复制代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    int n;
    cin >> n;

    vector<vector<int>> vis(n);
    vis[0].push_back({1});//初始化

    for(int i = 1; i < n; i++)//构造杨辉三角
    {
        int j = 0;
        while(true)//每行的数字的获取
        {
            //当前的数字 = (横坐标 - 1 ,纵坐标相同) + (横坐标 - 1 ,纵坐标 - 1)
            //注意越界情况
            int left = (j - 1 < 0 || j - 1 >= vis[i - 1].size()) ? 0 : vis[i - 1][j - 1];
            int right = j < vis[i - 1].size() ? vis[i - 1][j] : 0;
            int cout = right + left;
            if(cout == 0) break;
            vis[i].push_back(cout);
            j++; 
        }
    }

    int x = vis.size();

    for(int i = 0; i < x; i++)//打印杨辉三角,控制格式输出
    {
        for(int j = 0; j < vis[i].size(); j++)
        {
            string s = to_string(vis[i][j]);
            if(s.size() < 5)
            {
                int seq = 5 - s.size();
                string tmp(seq,' ');
                s = tmp + s;
            }
            cout << s;
        }
        cout << endl;
    }
    
    return 0;
}
相关推荐
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠3 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾3 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8213 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q3 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒3 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记3 天前
单项不带头不循环链表
数据结构·链表
小糯米6013 天前
JS 数组
数据结构·算法·排序算法
小欣加油3 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒3 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode