leetcode118 -- 杨辉三角

news2025/1/16 11:12:08

文章目录

      • 一. 问题描述
        • 示例 1
        • 示例 2
        • 提示
      • 二. 解决问题
        • 主函数:
        • 法一:递归
          • 1. 解题思路
          • 2. 解题代码
        • 法二:动态规划
          • 1. 解题思路
          • 2. 解题代码
        • 法三:暴力破解
          • 1. 解题思路
          • 2. 解题代码

一. 问题描述

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2

输入: numRows = 1
输出: [[1]]

提示

1 <= numRows <= 30

二. 解决问题

主函数:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        for(List<Integer> i : generate2(num)){
            System.out.println(i);
        }
    }

法一:递归

1. 解题思路

递归方法总而言之就是抓住三点:

  • 找整个递归的终止条件
  • 找返回值
  • 一次递归需要如何操作

  • 找整个递归的终止条件
    • 递归至numRows = 0或者numRows = 1都可以终止。
  • 找返回值
    • 题目返回值为List<List> ,也就是每一行遍历完一个list,之后把list附加到总的list之后就OK了。
  • 一次递归需要如何操作
    在这里插入图片描述
    • 看一看第二行 -> 第三行是如何操作的:
      • 第一位和最后一位都是1,中间的数字再进行计算。
      • row.add(dg.get(numRows - 2).get(j - 1) + dg.get(numRows - 2).get(j))
2. 解题代码
 public static List<List<Integer>> generate(int numRows) {
        List<List<Integer>> dg = new ArrayList<>();
        if(numRows == 0)
            return dg;
        if(numRows == 1){
            dg.add(new ArrayList<>());
            dg.get(0).add(1);
            return dg;
        }

        //dg得接收这个返回值,要不然,递归进去东西,根本没有更新
        dg = generate(numRows - 1 );
        List<Integer> row = new ArrayList<>();
        row.add(1);
        //假设numRows = 3,那么它那一行就应该有3个元素,又是用list存储的,所以j < numRows - 1。
        for(int j = 1; j < numRows - 1; j++){
            //-2的原因是因为list是从0开始存储的,而要的数据为上一层的数据
            row.add(dg.get(numRows - 2).get(j - 1) + dg.get(numRows - 2).get(j));
        }
        row.add(1);
        dg.add(row);
        return dg;
    }

法二:动态规划

1. 解题思路
  • 和法一比较类似,只是将递归换成了迭代。引入了Prerow,保存上一个list中的数据。
2. 解题代码
 public static List<List<Integer>> generate1(int numRows){
        List<List<Integer>> dp = new ArrayList<>();
        if(numRows == 0)
            return dp;
        //考虑用迭代来操作
        dp.add(new ArrayList<>());
        dp.get(0).add(1);
        //i 为行数
        for(int i = 2; i <= numRows; i++){
            List<Integer> row = new ArrayList<>();
            //i表示的是行数,而dp是从0开始存的,上一个为dp[0],也就是第一行
            List<Integer> Prerow = dp.get(i - 2);
            row.add(1);
            //一行当中第一个元素为1,最后一个元素也为1,所以为j<i-1
            for(int j = 1; j < i - 1; j++) {
                row.add(Prerow.get(j - 1) + Prerow.get(j));
            }
            row.add(1);
            //一行结束了,要并入总的list里面
            dp.add(row);
        }
        return dp;
    }

法三:暴力破解

1. 解题思路
  • 一行一行遍历,该加的数字相加。
2. 解题代码
    public static List<List<Integer>> generate2(int numRows) {
        List<List<Integer>> res = new ArrayList<>();

        for(int i = 0;i<numRows;i++){
            List<Integer> ans = new ArrayList<>();
            for(int j = 0;j<=i;j++){
                if(j == 0 || j == i){
                    ans.add(1);
                }else{
                    ans.add(res.get(i-1).get(j-1)+res.get(i-1).get(j));
                }
            }
            res.add(ans);
        }
        return res;
    }

参考:https://leetcode.cn/problems/pascals-triangle/solution/javadi-gui-dong-tai-gui-hua-by-jeromememory/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例驱动,手把手教你学PyTorch(一)

通过案例学PyTorch。 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 介绍 PyTorch是增长最快的深度学习框架&#xff0c; Fast.ai在其 MOOC、Deep Learning for Coders及其库中也使用了它。 PyTorch 也非常Python 化&#xff0c;也就是说&am…

ubuntu18.04编译GB28181Server

目录一、简绍二、项目依赖的第三方库2.1 jrtplib2.1.1 编译JRTPLIB2.2 mxml2.2.1 编译mxml2.3 osip2/exosip22.3.1 编译osip22.3.2 编译exosip22.4 ffmpeg2.5 提示三、修改GB28181Server3.1 修改GB28181Server.pri3.2 修改AppConfig.cpp3.3 修改GB28181Server.cpp3.4 修改RtpRe…

Java 查漏补缺

文章目录1. Rest风格# 传统访问# Rest风格# Restful开发中的注解介绍2. controller中路径参数3. 约束Controller中方法的请求类型4. 视图跳转5. java.sql.Date 和 java.util.Date 的联系和区别6. 使用 Slf4j 日志7.定时任务81. Rest风格 Rest也叫做范文资源的形式&#xff0c;…

最简单的git图解(系列一)

git clone: 这个命令用于将远程代码仓库克隆到本地&#xff0c;这是对任何项目进行开发前的第一步。 比如你本地本来并没有某个项目的代码仓库&#xff0c;此时随便找一个文件目录并进入cmd命令窗口&#xff0c;执行命令git clone [remote address]&#xff0c;[remote addres…

SQL 50 题(MySQL 版,包括建库建表、插入数据等完整过程,适合复习 SQL 知识点)

目录1.建库建表2.插入数据3.SQL 50 题3.1.SQL 01——查询"01"课程比"02"课程成绩高的学生的信息及课程分数3.2.SQL 02——查询"01"课程比"02"课程成绩低的学生的信息及课程分数3.3.SQL 03——查询平均成绩大于等于 60 分的同学的学生编…

SMP多核启动(一):spin-table

前言 看这篇文章&#xff0c;你必备的一些前置知识有如下 1、ATF启动流程 2、PSCI电源管理的概念 3、设备树 如果没有&#xff0c;可以去我的专栏目录下逛逛&#xff0c;会有所收获。 1、SMP是什么&#xff1f; SMP 英文为Symmetric Multi-Processing &#xff0c;是对称多…

Vscode环境下的PyQt

一、环境配置 ①在Conda控制台下执行以下两条命令&#xff0c;添加开发环境 pip install PyQt5 pip install PyQt5-Tools ②找到designer.exe并运行 文件在哪网上说法千奇百怪&#xff0c;我建议还不如装个everything直接在C盘做全局搜索来得快&#xff0c;实在不想装的话可以…

C轮累积融资1亿美金 禾多科技如何靠自我造血能力赢得资本青睐?

自动驾驶当前在全球范围内受到广泛关注&#xff0c;是汽车行业正在集中力量攻克的新领域。据英特尔预计&#xff0c;2050年仅自动驾驶汽车的市场规模将达到7万亿美元。引得资本和科技巨头们纷纷“下注”。 近日&#xff0c;全栈自动驾驶科技公司禾多科技宣布&#xff0c;已完成…

Redis主从结构数据同步分析

Redis主从结构有两种部署方式&#xff0c;如下&#xff1a; 一主多从的模式是使用最多的模式&#xff0c;通常搭建哨兵或者集群都采用这种方式&#xff0c;但是这种方式主节点复制压力较大&#xff0c;尤其是全量同步的时候。 级联结构使用情况相对较少&#xff0c;这种结构中间…

前端AST详解,手写babel插件

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;专注于前端领域各种技术&#xff0c;热衷分享&#xff0c;关注我会给你带来一些不一样的认知和成长。 &#x1f4dd;个人签名&#xff1a;不破不立 &#x1f36c;本文目录&#x1f959;一…

C++课堂整理--第二章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1程序控制结构 语句是程序的基本语法成分。程序设计语言的语句按功能可以分成三类&#xff1a;声明语句 指示编译器分配内存&#xff0c;或者提供程序…

Windows服务器配置证书

以windows server 2012为列 1.打开服务器管理器 2.添加角色和功能 3.点击下一步 4.继续下一步 5.继续下一步 6.选择证书服务 7.添加该功能 8.继续下一步 9.继续下一步 10.继续下一步 11.添加证书颁发机构和证书颁发机构web注册 &#xff0c;然后点击下一步 12.点击安装 13.再次…

Linux|centos二进制方式安装系统和网络监控神器prometheus+grafana(装逼神器它来了)

Prometheus简单介绍&#xff1a; Prometheus使用Go语言开发&#xff0c;是Google BorgMon监控系统的开源版本&#xff0c;怎么产生的就不在这讨论了&#xff0c;反正就是香&#xff0c;简单易用。 2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing F…

apache-atlas-hive-hook-源码分析

Atlas Hook类图 Hive 元数据变更有2种实现&#xff1a; 1)基于 Hook 函数实现&#xff0c;实现类为 HiveHook 2)基于MetaStoreEventListener 实现&#xff0c; 实现类为HiveMetastoreHookImpl 所以提供2 种配置&#xff0c;即配置钩子函数或监听器&#xff0c;我们目前采用的是…

nvm包管理工具下载安装

1&#xff0c;去github官网&#xff0c;输入nvm-windows&#xff0c;点击第一个nvm项目&#xff0c;在右侧点击releases,选择箭头指向的安装包 2&#xff0c;下载很快&#xff0c;但是安装前&#xff0c;得先卸载本机的nodejs,并且为nvm的包创建一个英文文件夹&#xff0c;…

Java---Map双列集合

目录 一、双列集合的介绍 二、Map的使用 1&#xff1a;Map中常见的API &#xff08;1&#xff09;put方法 &#xff08;2&#xff09;remove方法 2&#xff1a;Map的遍历 &#xff08;1&#xff09;通过键找值的方式遍历 &#xff08;2&#xff09;通过键值对对象遍历 &…

FRNet代码

代码目录简简单单&#xff0c;令人心旷神怡。 模型框架&#xff1a; 数据增强包括; 接着看一下数据集&#xff1a; import os from PIL import Image import numpy as np from sklearn.model_selection import train_test_splitimport torch import torch.utils.data as da…

Tomcat+Maven+Servlet安装与部署

文章目录前言一、Tomcat8下载安装二、MavenServlet部署1.创键Maven项目&#xff08;idea2021community&#xff09;2.pom.xml下引入servlet依赖3.main下创建webapp/WEB-INF/web.xml4.验证HttpServlet是否导入&#xff08;配置WebServlet路径&#xff09;5.手动打包web项目6.浏览…

DAMA-CDGA/CDGP数据治理认证包括哪几个方面?

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

【夯实Kafka知识体系及基本功】分析一下消费者(Consumer)实现原理分析「原理篇」

Consumer消费者 消费者可以从broker中读取数据。 一个消费者可以消费多个topic中的数据&#xff08;其中一个partion&#xff09;。 Consumer Group&#xff08;消费组&#xff09; 每个Consumer属于一个特定的Consumer Group。 可为每个Consumer指定group name&#xff0c…