java之杨辉三角问题

news/2024/9/21 0:03:25/

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

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

如何实现呢?

思路:首先,我们可以将杨辉三角视作i行j列的二维数组。除了第一行和第二行之外,其他行的元素都是首尾元素为1且该行的其他元素都是上一行相邻元素之和。有了这个思路,下面的实现步骤就可以有效的进行了。

步骤:

1.创建一个二维列表ret,用来存储每一行的元素。

2.创建一个只有元素1的列表(作为第一行)并将其添加到数组ret中

3.生成后续行:

(1):从第二行开始,通过for循环求该行的每一个元素,直到最后一行:

       for (int i = 1; i < numRows; i++)

(2):通过创建整形列表curRow,创建当前行的列表,同时通过add函数添加该行的第一个元素1。

(3):创建一个整形列表preRow用来接收上一行的值。

4.创建当前行中间的值:

(1):从第二个元素for循环到当前倒数第二个元素。for (int j = 1; j < i; j++) (因为第一个元素和倒数第二个元素都是1.)

(2):设置两个整形int val1 和 int val2,获取上一行相邻的两个元素( int val1=preRow.get(j); 

         和 int val2 = preRow.get(j-1);) 

(3):将两个值相加后添加到当前行:curRow.add(val1 + val2);

5.添加当前行的最后一个元素1:curRow.add(1)

6.将当前行添加到二维列表ret中。(ret.add(curRow);)

7.返回结果:return ret ,返回生成的杨辉三角。

具体实现代码如下:

class Solution {public List<List<Integer>> generate(int numRows) {List <List<Integer>> ret = new ArrayList<>(); //创建一个二维列表List<Integer> list0 = new ArrayList<>(); // 创建杨辉三角的第一行list0.add(1); //添加杨辉三角的第一个元素ret.add(list0); //将list0添加到ret中//从第二行开始求每个元素for(int i=1;i<numRows;i++){//处理第一个元素List<Integer> curRow = new ArrayList<>();curRow.add(1);//中间List<Integer> preRow = ret.get(i-1); //获取上一行的数组for(int j = 1;j<i;j++){int val1 = preRow.get(j);int val2 = preRow.get(j-1);curRow.add(val1+val2);}//尾巴处添加curRow.add(1);ret.add(curRow);}return ret;}
}

今天的分享就到这,喜欢的老铁来个三连吧


http://www.ppmy.cn/news/1528140.html

相关文章

大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【HTML】元素的分类(块元素、行内元素、行内块元素)

元素的分类 块元素行内元素行内块元素转换 块元素 独占一行&#xff0c;宽度默认为容器的100%&#xff0c;可以设置宽、高、行高、内外边距&#xff1b;布局时&#xff0c;块元素可以包含块元素和行内元素 <div>div</div><p>p</p><h3>h1-h6</…

WSL2+Ubuntu 22.04搭建Qt开发环境+中文输入法

WSL2Ubuntu 22.04搭建Qt开发环境中文输入法 安装 wsl 略 wsl 更新 wsl --update wsl --version wsl --status 我的显示如下, 如果你的版本不是 wsl2 需要改为 wsl2:$ wsl --update 正在安装: 适用于 Linux 的 Windows 子系统 已安装 适用于 Linux 的 Windows 子系统。 $ wsl --…

安装 Anaconda

Anaconda 安装与使用教程 Anaconda 是一个用于科学计算的 Python 和 R 的发行版&#xff0c;它包含了众多流行的科学、数学、工程和数据分析包。本教程将引导您完成 Anaconda 的安装&#xff0c;并介绍如何使用其主要功能之一——Conda 环境管理器来创建和管理环境。 第一部分…

R包compareGroups详细用法

compareGroups compareGroups 是一个功能强大的 R 包&#xff0c;专为数据质量控制、数据探索和生成用于出版的单变量或双变量表格而设计。它能够创建各种格式的报表&#xff0c;如纯文本、HTML、LaTeX、PDF、Word 或 Excel 格式&#xff0c;并显示统计数据&#xff08;均值、…

TPS和QPS的区别

TPS&#xff08;Transactions Per Second&#xff09;和QPS&#xff08;Queries Per Second&#xff09;是衡量系统性能的两个关键指标&#xff0c;主要区别在于TPS侧重于每秒钟能够处理的事务数&#xff0c;而QPS则强调每秒能大行的查询数。TPS关注于事务处理的能力&#xff0…

FewShotChatMessagePromptTemplate 和 FewShotPromptTemplate区别

FewShotChatMessagePromptTemplate 和 FewShotPromptTemplate 都是 LangChain 框架中用于少样本学习的提示模板&#xff08;Prompt Template&#xff09;&#xff0c;但它们在设计和用途上存在一些区别。 FewShotChatMessagePromptTemplate 用途&#xff1a;主要用于聊天场景…

jpa适配mysql切换达梦可能的坑

1、liquibase脚本 &#xff08;1&#xff09;达梦数据库不支持&#xff0c;修改字段varchar改成blob <changeSet author"ly" id"v3.0_4_202307111505_101"><renameColumn tableName"PC_SS_ZRQD" oldColumnName"BHNR" newCo…