【每日挠头算法题】Leetcode 989. 数组形式的整数加法 —— 高精度加法解法

news2024/11/23 15:43:11

👑作者主页:@进击的安度因
🏠学习社区:进击的安度因(个人社区)
📖专栏链接:每日挠头算法题

文章目录

  • 一、题目描述
  • 二、思路及代码实现

今天为大家带来的是力扣上的一道简单题:数组形式的整数加法。这道题我在2个月前就尝试过,但是没有解答出来。两个月后再做这道题目,就变得没那么难了。这次我将以高精度加法进行求解,让我们开始吧!

一、题目描述

链接:989. 数组形式的整数加法

描述

整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。

  • 例如,对于 num = 1321 ,数组形式是 [1,3,2,1]
    给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k数组形式

示例1

输入:num = [1,2,0,0], k = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234

示例2

输入:num = [2,7,4], k = 181
输出:[4,5,5]
解释:274 + 181 = 455

示例3

输入:num = [2,1,5], k = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021

提示:

  • 1 <= num.length <= 10^4
  • 0 <= num[i] <= 9
  • num 不包含任何前导零,除了零本身
  • 1 <= k <= 10^4

二、思路及代码实现

这道题题目大意就是:将数组转化为整数与整数 k 相加后的结果存入新数组中,将结果返回

比如 num = [1, 2, 0, 0], k = 34,计算后,返回结果就是 [1, 2, 3, 4]

但是可能有进位的存在,比如 [2, 1, 5]806 相加就会变成 1021原本数组大小就不够了

总结一下 numk 相加后的情况

  • 相加结果等于 num 数组位数
  • 相加结果等于 k 的位数
  • 相加结果比 numk 中较大的多 1

题目给定了 num 数组的大小 ,那么我只要求出 k 的大小然后比较一下,取较大的一个作为返回数组长度开辟空间时多开辟一个空间方便进位 就好了 。

考虑到进位的问题,所以这道题目我采用了 高精度加法 。其实博主之前只是大概知道高精度加法,所以做题目的时候专门去查了一下高精度加法是怎么使的。

高精度加法其实就是几个步骤:倒序存储数字 → 计算 → 存出结果

至于为什么倒着存,就是方便进位嘛,你想想对于一个数来说是在0下标前进位简单,还是在数组末尾进位简单?那当然是在数组末尾,因为往后偏移一个下标就可以。

对于这题算出长度 len ,开个 len + 1 大小的数组来处理 进位

然后就是相关变量的定义

  • oldNum :记录 num 数组中的数据
  • oldSize :记录原数组的下标
  • nextNum :存储相加后的数据,并判断是否进位
  • cnt :当前返回数组中的元素个数

计算并存储的过程

  1. 遍历 返回数组 res ,倒着取 num 数组元素,存到 oldNum 中,并 oldSize--

  2. 然后将 oldNumk % 10 ( k 对应位数的值) 的和 累加到 nextNum 中 。

  3. nextNum 的有效数字存入 res 数组当前位置,并将 cnt++ ,表示 res 数组有效数据位数增加。

  4. 再把 nextNum / 10 ,看结果是否为1,为 1 则有 进位

  5. 最后调整一下 kk / 10 去掉一位。

循环往复如上过程,也就基本把数据 倒着 存到了 res 数组中

但是注意了!!!

我们只遍历 len 次,只能计算出 相加结果等于 num 数组位数相加结果等于 k 的位数 的情况。

比如 num = [2, 1, 5] k = 806 的情况,在经过上述过程中,res 数组中数据为:

image-20221219211424512

这样没有考虑到进位的情况。

所以退出循环时,如果 相加结果有进位的话(nextNum == 1) ,是要额外处理一下的。就是在 cnt 下标处填 1 ,然后把 cnt++

image-20221219211551991

最后由于我们这个是倒着存的,所以需要把 res 数组的有效数据逆置一下

提一句:逆置的有效数据就是 cnt 的个数。因为我们先开始多开了一个空间,在没有进位的情况中,多开空间的位置是不会被填入数据的。

最后算出来,将 res 数组返回就好了。

接下来看看代码怎么写:

/*
 * oldNum  num数组中的数据
 * oldSize num数组的下标
 * nextNum 判断是否进位
 * cnt     res数组中有效数据的个数
 */

int* addToArrayForm(int* num, int numSize, int k, int* returnSize){
    // 算出 k 的位数
    int kSize = 0;
    int tmp = k;
    while (tmp) {
        ++kSize;
        tmp /= 10;
    }
    // 比较 k 和 数组的长度,求大的
    int len = numSize > kSize ? numSize : kSize;

    // 多开一个空间,以便进位
    int* res = (int*)malloc(sizeof(int) * (len + 1));

    // 高精度加法
    int oldNum = 0, oldSize = numSize - 1, nextNum = 0, cnt = 0;
    for (int i = 0; i < len; ++i) {
        oldNum = 0;
        if (oldSize + 1) {
            oldNum = num[oldSize--];
        }
        nextNum += oldNum + k % 10;
        res[cnt++] = nextNum % 10;
        nextNum /= 10;
        k /= 10;
    }
    if (nextNum) {
        res[cnt++] = 1;
    }
    // 将有效数据逆置
    int l = 0, r = cnt - 1;
    while (l < r) {
        int tmp = res[l];
        res[l] = res[r];
        res[r] = tmp;
        l++;
        r--;
    }
    *returnSize = cnt;
    return res;
}

完结撒花 🌹

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

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

相关文章

Spring的秒表StopWatch优雅的程序计时器 -第455篇

历史文章&#xff08;文章累计450&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 走进MyBatis源码一探Spring扩展点「知识…

排水监测传感器数据采集传感节点接入网关产品介绍

一、产品概述 传感节点接入网关是一款工业级网关&#xff0c;可将Modbus RTU协议的设备数据转换为MQTT协议格式再远传至数据中心&#xff0c;支持采集数字量输入信号&#xff0c;支持输出数字量控制信号。 传感节点接入网关具备一体化采集、传输、控制功能&#xff0c;集成了…

IDEA自定义JavaDOC注释模板

文章目录IDEA自定义JavaDOC注释模板方法注释模板1、创建模板2、设置模板内容-JavaDoc格式3、Define4、Edit VariablesIDEA自定义JavaDOC注释模板 JavaDOC注释模板共分为两种&#xff1a; 类注释模板方法注释模板 方法注释模板 1、创建模板 File–>Settings–>Editor…

FixMatch: Simplifying Semi-Supervised Learning with Consistency and Confidence

FixMatch: Simplifying Semi-Supervised Learning with Consistency and Confidence, NIPS, 2020 要点&#xff1a; 1、首先&#xff0c;基于 “弱增强的未标记样本的模型预测” 生成伪标签&#xff1b;接着&#xff0c;对于给定的样本&#xff0c;只有模型预测的置信度高时&a…

详细复习云开发~小程序【云存储、云函数】

文章目录一&#xff0c;云开发~云存储1-1&#xff0c;云开发控制台管理文件1-2&#xff0c;上传图片到云存储1-3&#xff0c;给商品列表加商品图片1-4&#xff0c;上传视频到云存储1-5&#xff0c;上传word&#xff0c;excel文件到云存储1-5-1&#xff0c;上传之前先选择文件1-…

mybatis if test对Intger判空的坑、原理及解决方法

文章目录问题描述源码分析解决方法问题描述 Mybatis在进行<if test"status! null and status! ">非空判断操作时&#xff0c;如果status为0的时候&#xff0c;该判断条件的值为false 写法如下&#xff1a; <select id"countByBySearchCondition&quo…

提取任意开始年月日到结束年月日中间的所有日期和星期

&#x1f37f;*★,*:.☆欢迎您/$:*.★* &#x1f37f; 分为三种情况 1 同年同月不通日 2 同年不同月 3不同年 不同年分为 两种情况 一种是开始年 开始年月不是12月的要单独计算 一种是结束年 结束年要不是1月的要单独计算 同时每种情况结尾天数分割也不同 #!/usr/bin/python # …

玉湖冷链首次参展中国冷链产业年会

洞见时代&#xff0c;探冬寻暖。12月15-17日&#xff0c;「2022第十六届中国冷链产业年会」在厦门举行。玉湖冷链深度参与行业盛会&#xff0c;首次设展&#xff0c;与上千名行业人士进行了深入交流&#xff0c;并参与了中物联冷链委四届三次理事会和主论坛首席对话等环节。 年…

JaveWeb框架(二):Servlet组件入门

Servlet入门 MVC实战项目 仓储管理系统Servlet 入门DemoServlet 执行流程、生命周期执行流程生命周期Servlet API介绍Servlet体系结构Servlet urlPattern配置Servlet&#xff1a;请求与响应Request&#xff1a;请求请求的构成请求API方法来获取对应的值:请求参数的获取方式请求…

后台系统权限流程

菜单管理 角色管理 相关逻辑 <template><div><a-tree :checkable"true"check"handlerChecked"select"handlerSelectNode"/></div> </template><script> export default { data(){return {// 选中节点的ke…

宠物领养网站

成品详细信息 开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 基于java的宠物领养管理系统用户模块包括注册登录、个人信息管理、 可领养宠物信息查询、宠物助养信息查…

Java注册登录及邮箱发送账号激活(主要技术栈SpringBoot,MyBatis)

文章目录前言学习之前需要掌握的知识项目环境搭建数据库的搭建前端页面的搭建后端代码格式pojomapperControllerservice最后前言 项目流程图如下&#xff1a; 这里我们通过&#xff1a; 163邮箱来实现激活码发送qq邮箱来进行接收 学习之前需要掌握的知识 springboot的基本使…

解决tinypng 1.0.6 在线压缩C#接口报ssl错误的方法

因为作者的做法是使用了他们的证书, 但是如果是插件引用, 感觉是无法调用的. 所以我们直接下载code 修改这里即可 namespace TinifyAPI.Internal internal static class SSL public static bool ValidationCallback(HttpRequestMessage req, X509Certificate2 cert, X509Chain…

二十四节气-冬至,海报/文案分享,一口饺子,一口吉。

古说&#xff0c;冬至是阴极之至 阳气始生&#xff0c;有冬至大如年的说法 冬至到&#xff0c;家家户户吃水饺&#xff0c; “冬至不端饺子碗&#xff0c;冻掉耳朵没人管” “三九补一冬&#xff0c;来年无病痛” 可吃羊肉等温补…… 一组超级好的大牌文案 真心秀色可餐 下面是…

selenium自动化测试——unittest框架

文章目录unittestunittest 框架组成细节unittest测试示例用例的执行顺序忽略测试用例的执行unittest断言HTML报告生成生成HTML报告步骤异常捕捉与错误截图数据驱动unittest unittest 是python 的单元测试框架&#xff0c; 在python 的官方文档中&#xff0c;对unittest有详细的…

学会JVM,从这篇开始

目录 一、了解 JVM 二、JVM内存划分 三、类加载 1. 类加载是干啥的? 什么是类对象 ? 2. 类加载的大致过程 3. 什么是 双亲委派模型(重点) ? 四、GC 1. GC回收的是哪里的内存 2. 回收如何判断某个对象是否是垃圾? ① 引用计数(Python PHP采用) ② 可达性分析(JVM采用) 3. …

【计算机考研408】2023考研408大题预测总结

数据结构 链表相关算法题 反转链表1 题源1&#xff1a;反转链表1 比较简单&#xff0c;可以作为思想记忆&#xff0c;不太会这么直接考察 408可能考察链表的实现&#xff0c; ListNode* reverseList(ListNode* head) {if(head NULL) return NULL;//头插法ListNode * p …

计算机毕设Python+Vue学生健康管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jsp+ssm计算机毕业设计二手车交易系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

(八) mysql主从以及Redis集群

mysql主从以及Redis集群一、Mysq主从复制安装1、新建主服务器容器实例33072、进入/mydata/mysql-master/conf目录下新建my.cnf3、进入mysql-master容器4、master容器实例内创建数据同步用户5、新建从服务器容器实例33086、创建从机的配置文件7、在主数据库中查看主从同步状态8、…