力扣119杨辉三角 II:代码实现 + 方法总结(数学规律法 记忆法/备忘录)

news2024/11/26 22:38:29

文章目录

  • 第一部分:题目
  • 第二部分:解法①-数学规律法
    • 2.1 规律分析
    • 2.2 代码实现
    • 2.3 需要思考
  • 第三部分:解法②-记忆法(备忘录)
  • 第四部分:对比总结

第一部分:题目

🏠 链接:119. 杨辉三角 II - 力扣(LeetCode)

⭐ 难度:简单

image-20230414144132090

第二部分:解法①-数学规律法

2.1 规律分析

2.2 代码实现

public static List<Integer> getRow(int rowIndex) {
    // 建立一个capacity=rowIndex+1的集合
    ArrayList<Integer> arrayList = new ArrayList<>(rowIndex + 1);
    
    // 设置第rowIndex行首位置的值
    long indexValue = 1;
    // 遍历第rowIndex行所有位置
    for (int i = 0;i <= rowIndex;i++){
        // long强转为int,将indexValue加入集合,发生了自动装包int->Integer
        arrayList.add((int)indexValue);
        // 根据规律设置下一个好下一个位置的值
        indexValue = indexValue*(rowIndex-i)/(i+1);
    }
    return arrayList;
}
/*
这里有个细节:我们定义indexValue时类型为long,为什么不设置为int类型,这样便可以舍去加入集合时的强转过程
			这是因为如果将indexValue定义为int类型,
			那么在代码第六行计算indexValue*(rowIndex-i)时
			由于indexValue,rowIndex和i都为int,那么indexValue*(rowIndex-i)的结果也为int
			但是当rowIndex过大时,计算该行某些位置时indexValue*(rowIndex-i)的值会超过int的范围
			导致这个值为负数。
			因此,我们定义类型为long的话,由于long的精度比int高,
			而indexValue*(rowIndex-i)的结果自然为long类型,且没有超过long的取值范围,
			所以indexValue*(rowIndex-i)得到的便会是正常结果,而非因为数据溢出结果变为负数
*/

2.3 需要思考

我们定义indexValue时类型为long,为什么不设置为int类型,这样便可以舍去加入集合时的强转过程。

这是因为如果将indexValue定义为int类型,那么在代码第六行计算 indexValue * ( rowIndex - i ) 时由于 indexValue , rowIndex 和 i 都为int,那么 indexValue * ( rowIndex - i ) 的结果也为int。但是当rowIndex过大时,计算该行某些位置时indexValue*(rowIndex-i)的值会超过int的范围导致这个值为负数

因此,我们定义类型为long的话,由于long的精度比int高,而indexValue*(rowIndex-i)的结果自然为long类型,且没有超过long的取值范围,所以indexValue * ( rowIndex - i ) 得到的便会是正常结果,而非因为数据溢出结果变为负数。

第三部分:解法②-记忆法(备忘录)

Memoization 记忆法(也称备忘录)是一种优化技术,通过存储函数调用结果(通常比较昂贵),当再次出现相同的输入(子问题)时,就能实现加速效果

    public List<Integer> getRow(int rowIndex) {
        ArrayList<Integer> list = new ArrayList<>(rowIndex + 1);
        // 设置首元素的值为1
        list.add(1);
        // 从第二行(行索引为1)开始遍历
        for (int i = 1; i <= rowIndex; i++) {

            for (int j = i - 1; j > 0; j--) {
                // 规律: [i][j] 的取值应为 [i-1][j-1] + [i-1][j]
                list.set(j, list.get(j - 1) + list.get(j));
            }
            // 末尾元素的值为1
            list.add(1);
        }
        return list;
    }

第四部分:对比总结

我们来看下两种方法的执行效率:

1️⃣ 数学规律法

image-20230414150218699

2️⃣ 记忆法

image-20230414150144355

很明显,数学规律法花费的时间更少,这是因为 数学规律法 只需要我们逐一计算第 rowIndex 行每个元素的值即可,而 记忆法 需要我们从第0行开始,计算每一行每一个元素的值。

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

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

相关文章

工业路由器IO远程控制使用说明(智联物联)

工业路由器IO控制是指路由系统已开发支持对用户DI&#xff08;数字输入&#xff09;/DO&#xff08;数字输出&#xff09;/Relay&#xff08;继电器&#xff09;类型的设备控制操作&#xff0c;目前各支持1路设备类型。 IO控制目前支持2种方式进行控制操作&#xff0c;即通过工…

C/C++每日一练(20230417)

目录 1. 字母异位词分组 &#x1f31f;&#x1f31f; 2. 计算右侧小于当前元素的个数 &#x1f31f;&#x1f31f;&#x1f31f; 3. 加一 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 J…

【JavaScript】3.JavaScript预解析

JavaScript 预解析 1. 变量预解析 和 函数预解析 js引擎运行js 分为两步&#xff1a; 预解析 代码执行 预解析 js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面代码执行 按照代码书写的顺序从上往下执行 预解析分为 变量预解析&#xff08;变量提升&…

0101壳-手写springboot-springboot系列

文章目录1 前言1 创建我们自己的pringboot模块1.1 引入相关依赖1.1 启动类注解1.2 启动类2 测试模块3 启动测试结语1 前言 springboot有以下作用&#xff1a; 简化配置&#xff1a;Spring Boot提供了一组预定义的自动配置选项&#xff0c;可以快速地配置应用程序&#xff0c;…

2023年虚拟数字人行业研究报告

第一章 行业概况 虚拟数字人指存在于非物理世界中&#xff0c;由计算机图形学、图形渲染、动作捕捉、深度学习、语音合成等计算机手段创造及使用&#xff0c;并具有多种人类特征&#xff08;外貌特征、人类表演能力、人类交互能力等&#xff09;的综合产物。虚拟人可分为服务型…

[Python工匠]输出① 变量与注释

变量&#xff08;variable&#xff09;是用来从内存找到某个东西的标记 #去掉s两边的空格&#xff0c;再处理 value process(s.strip()) s " hello World " value1 len(s) value2 len(s.strip())print(value1) print(value2) #用户输入可能会有空格&#x…

【云原生】k8s集群命令行工具kubectl之应用部署命令详解

kubectl应用部署命令详解一、准备工作1.1、Replication Controller1.2、Deployment1.3、DaemonSet1.4、查看创建的svc和pod1.5、kubectl 命令自动补全设置二、应用部署命令2.1、diff2.2、apply2.3、replace2.4、rollout2.4.1、history2.4.2、pause2.4.3、resume2.4.4、restart2…

Ubuntu20.04安装matlab2022b

Ubuntu20.04安装matlab2022b 1.系统要求 Ubuntu 22.04 LTSUbuntu 20.04 LTSUbuntu 18.04 LTSDebian 11Debian 10Red Hat Enterprise Linux 9Red Hat Enterprise Linux 8 (minimum 8.4)Red Hat Enterprise Linux 7 (minimum 7.9)SUSE Linux Enterprise Desktop 15SUSE Linux E…

【攻城狮计划】Renesas RA2E1 详细介绍

&#x1f6a9;WRITE IN FRONT&#x1f6a9; &#x1f50e;介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四"&#x1f50e;&#x1f3c5;荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TOP10…

A40i使用笔记:QT使用alsa采集音频pcm信息

一、前言 目的是实现一种效果&#xff0c;就是在音频识别时&#xff0c;能够实时显示当前人员说话的声音幅度&#xff0c;通过波形曲线的形式显示出来。如下效果&#xff08;非我实现&#xff09; 还可以实现在实时采集的同时&#xff0c;将需要的数据保存成指定格式文件&…

状态设计模式(State Pattern)[论点:概念、相关角色、图示、示例代码、框架中的运用、适用场景]

文章目录概念组成角色相关图示代码示例框架中的应用适用场景概念 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;用于解决对象在不同状态下的行为问题。它允许一个对象在其内部状态改变时改变它的行为。状态模式主要包含三个部分&#xff1a;…

Day924.自动化测试 -系统重构实战

自动化测试 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于自动化测试的内容。 自动化测试是一个很容易产生“争议”的话题&#xff0c;也经常会有一些很有意思的问题。 自动化测试不是应该由测试同学来编写吗&#xff0c;开发是不是没有必要学吧&#xff1f;之前…

圆角升级啦,来手把手一起实现自定义ViewGroup的各种圆角与背景

作者&#xff1a;newki 定制圆角与背景的自定义ViewGroup实现 前言 目前线上的一些第三方圆角容器大部分都只支持四周固定圆角&#xff0c;我们一些使用场景只需要顶部圆角&#xff0c;或者底部圆角&#xff0c;或者一个角圆角。 &#xff08;话说为什么我们的UI这么喜欢各种…

webpack plugin源码解析(四) HashedModuleIdsPlugin

文章目录作用涉及 webpack API获取chunkGraph获取当前编译过程中被使用过的 module id&#xff1a;compilation.usedModuleIds获取当前编译过程中所有的模块对象&#xff1a;compilation.modules判断 module 是否需要生成 id&#xff1a;module.needId获取指定module 的 module…

新品首发丨计讯物联智慧灯杆TG473-A6-5“滴水不进”,严苛环境下稳定运行无压力

近年来&#xff0c;智慧灯杆产业快速发展&#xff0c;已广泛应用于智慧城市、智慧交通、智慧园区、智慧停车等细分场景&#xff0c;提质增效、节本降耗的作用突显。值得注意的是&#xff0c;不同的场景有着不同的环境条件&#xff0c;如高低温、潮湿、沙尘等&#xff0c;对智慧…

Nginx学习(9)—— 负载均衡模块

文章目录Nginx负载均衡模块负载均衡配置指令钩子初始化配置初始化请求peer.get和peer.free回调函数小结Nginx负载均衡模块 负载均衡模块用于从”upstream”指令定义的后端主机列表中选取一台主机。nginx先使用负载均衡模块找到一台主机&#xff0c;再使用upstream模块实现与这…

应急响应 - Windows进程分析,Windows网络分析,tasklist,wmic process

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 进程网络排查一、Tasklist1、tasklist /v1、tasklist /svc2、tasklist /m二、wmic proces…

JAVAWeb02-CSS

1. CSS CSS 指的是层叠样式表 (Cascading Style Sheets) 1.1 概述 1.1.1 官方文档 地址: https://www.w3school.com.cn/css/index.asp 1.1.2 为什么需要 CSS 在没有 CSS 之前&#xff0c;我们想要修改 HTML 元素的样式需要为每个 HTML 元素单独定义样式属性&#xff0c;费心…

nodegui搭建/你好/打包

0、github连接问题 警告&#xff1a;如果你的网络有任何有任何有任何有任何有任何有任何有任何有任何有任何有任何连接 github 的问题&#xff0c;彻底放弃该框架 请转到其他框架 electron-egg教程、electron-egg官网&#xff0c;或其他electron项目 Tauri教程、Tauri官网 NW.…

Smartbi电子表格软件架构与差异化特色

选择和Excel结合Smartbi电子表格软件选择与Excel结合的原因在于&#xff0c;Excel一直被模仿&#xff0c;从未被超越。虽然市场上的报表软件很多&#xff0c;但存在太多的不完美。国外的产品功能复杂、难于学习&#xff08;控件方式&#xff09;&#xff0c;做不了中国式复杂格…