LeetCode·每日一题·415. 字符串相加·模拟

news2025/2/4 12:52:37

作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

 

思路

题意 -> 给定二个字符串,计算它们的和并同样以字符串形式返回。

直接从尾部向头部进行枚举,模拟实际计算过程,每取一个数就将字符转换为数字,然后计算之后再将其转换为字符存储,最后判断是否存在进位,如果存在进位就将进位也存储。

关于进位的一个技巧,因为和运算,进位只可能有 1,因此在开辟内存的时候就将进位的位置开辟出来,并赋值 为 1,最后返回时,如果存在进位就返回字符串首地址,反之返回字符串首地址 + 1 ---- 去取进位影响。

代码注释超级详细

ps:此题我在去年的时候也做过一次,再回看当时代码时,感慨万千,通过看代码就知道,当时代码水平非常有限,代码写的也非常冗余,经过一年的学习,进步还是非常明显的。各位努力吧!!!

 

代码

char * addStrings(char * num1, char * num2){
    int len1 = strlen(num1);
    int len2 = strlen(num2);
    int len = (len1 > len2 ? len1 : len2) + 2;
    char *ans = malloc(sizeof(char) * len);
    memset(ans, 0, len);//初始化
    ans[0] = '1';//进位赋值
    int c = 0;//记录进位
    for (int i = len - 2; i > 0; i--) {
        int sum = 0;//记录和
        if (len1 > 0) {//取数
            sum += (num1[len1 - 1] - '0');
            --len1;
        }
        if (len2 > 0) {//取数
            sum += (num2[len2 - 1] - '0');
            --len2;
        }
        sum += c;//加上一位的进位
        c = sum / 10;//保存进位
        sum %= 10;//保存当前位
        ans[i] = sum + '0';//字符存储
    }
    return c ? ans : ans+1;//判断进位返回对应地址
}

作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
char * addStrings(char * num1, char * num2){
    int num1_len = strlen(num1);
    int num2_len = strlen(num2);
    int len_1 = num1_len-1;
    int len_2 = num2_len-1;
    int max_len = num1_len>num2_len ? num1_len : num2_len;
    char * num = malloc(sizeof(char) * (max_len+2));
    int i =0,sum = 0,max = max_len+2;
    while(len_1>=0&&len_2>=0)
    {
        sum = (num1[len_1--]-'0')+(num2[len_2--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    while(len_1>=0)
    {
        sum = (num1[len_1--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    while(len_2>=0)
    {
        sum = (num2[len_2--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    if(i>0)
    {
        num[0] = i+'0';
        num[max-1] ='\0';
        return num;
    }
    num[max-1] ='\0';
    return ++num;
    
}


作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

自适应巡航控制系统研究(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 据统计, 我国交通事故造成的伤亡人数每年超过10万人, 其中驾驶员人为原因 (疲劳、酒驾、误操作等) 所致事故逐渐升高.汽车交通…

Python多线程同步编程Event使用方法

一、Event简介 Event是Python多线程同步编程中的一种同步原语,它可以帮助我们协调多个线程的操作,以达到线程间传递信号、同步操作等目的。 Event主要有两种状态:已设置和未设置。当Event被设置时,所有等待该Event的线程都会被唤…

数据结构-Java逆天操作

本文章会对Java线性表的相关知识进行讲解,也会以Java代码示例来进行解释 这里写目录标题 本文章会对Java线性表的相关知识进行讲解,也会以Java代码示例来进行解释对线性表的讲解分析定义可以表示为线性表可以用多种方式来表示和实现,常见的实…

数据结构与算法——什么是单链表,链式存储结构详解

前面详细地介绍了顺序表,本节给大家介绍另外一种线性存储结构——链表。 链表,别名链式存储结构或单链表,用于存储逻辑关系为 "一对一" 的数据。与顺序表不同,链表不限制数据的物理存储状态,换句话说&#…

基于 SpringBoot 的高校宿舍管理系统设计与开发

1.引言 宿舍是大学生学习与生活的主要场所之一,宿舍管理是高校学工管理事务中 尤为重要的一项。随着我国高校招生规模的进一步扩大,学生总体人数的不断增加, 宿舍管理工作变得愈加沉重和琐碎,学生宿舍信息的采集、汇总、统计与分析…

火山引擎A/B测试“广告投放实验”基础能力重构实践 (DataFunTalk渠道)

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 企业在进行营销推广时,广告投放通常是必备环节之一。为了避免投放“乱烧钱”,在大规模投放前,企业和广告优化师都会希望在多种广…

Web3时代来临:你准备好了吗?

如果你正在浏览本文,那么很可能你已经是Web3时代的一部分了,或者至少是将要成为其中的一员。因为Web3时代即将来临,它将彻底改变我们对互联网的认识和使用方式。 那么,什么是Web3时代呢?简单来说,它是指基于…

uniapp微信小程序中使用echarts及修改报错代码

一、下载依赖 1.1、获取mpvue-echarts组件 可以先随便建个文件夹,然后 npm init。运行下面的命令行,下载依赖 npm install echarts mpvue-echarts找到node_modules\mpvue-echarts\下的文件,保留src文件夹,其他删除,复…

Xcode上传App Store Connect流程

一、上传前配置 1、配置好发布证书描述文件(dis) 2、配置好Version和Build的值,不配置上传过程会失败。 二、编译上传 1、菜单栏选择【Product】——【Archive】,开始编译,然后等待编译完成后,Xcode弹出编…

装有系统盘的U盘,在笔记本电脑不显示如何操作

codesys解压文件projectarchive失败 一般情况下,U盘在笔记本上不显示 如果你的笔记本插入U盘后没有显示U盘的图标,可能是由于以下几个原因导致的: 硬件问题:首先,确保U盘与笔记本电脑的USB接口连接良好。你可以尝试将…

7、sentinel使用和源码分析

一、分布式系统遇到的问题 1、服务雪崩效应 在分布式系统中,由于网络原因或自身的原因,服务一般无法保证 100% 可用。如果一个服务出现了问题,调用这个服务就会出现线程阻塞的情况,此时若有大量的请求涌入,就会出现多条线程阻塞等待&#x…

8. 自动化测试 selenium

目录 1. 什么是自动化 2. 自动化测试金字塔 2.1 单元测试 2.2 接口自动化 2.3 UI自动化 3. 什么是 selenium 4. selenium 工作原理(重点) 1. 什么是自动化 自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统&#xff0…

51单片机学习--LED流水灯

#include <REGX52.H> #include <INTRINS.H>void Delay1ms(int t) //11.0592MHz {while(t --) {unsigned char i, j;_nop_(); //需要添加头文件i 2;j 199;do{while (--j);} while (--i);} }//延时1ms执行t次void main() {while(1){P2 0xFE; //1111 1110Delay1ms…

【Javascript】前端对文件进行md5计算再上传,以节省OSS云端存储空间

安装插件 browser-md5-file browser-md5-file 用于计算文件md5&#xff0c;文档介绍较少&#xff0c;看看就能使用↓ 使用例子 比如我用 el-upload 组件上传图片 <el-uploadaction""class"upload-box":show-file-list"false"accept"…

找回删除的MP3文件不再难,这三种方法让你轻松应对

在数字时代&#xff0c;我们常常将歌曲、照片和文档等重要数据存储在电脑或移动设备中。然而&#xff0c;有时我们会不小心删错了文件&#xff0c;比如误删了一首喜欢的MP3歌曲。这时&#xff0c;如何恢复这些被误删除的文件就变得至关重要。本文将介绍一些常见的方法和技巧&am…

labview 弹窗(子vi)

如果你遇到了需要在主vi运行时需要弹窗某个窗口(或者称为子vi,子画面)&#xff0c;而且要主画面和子画面能独立运行各自的循环程序&#xff0c;本文能给你帮助。 本文的精髓在于: wait until Donefalse,表示子VI运行的同时&#xff0c;主vi也继续运行后面的代码&#xff0c;主…

Devops7实验环境搭建(terraform-kind-k8s-argocd)

Devops7实验环境搭建(terraform-kind-k8s-argocd) 目录 实验环境 操作系统&#xff1a; CentOS8 Linux &#xff08;我本次用centos7.6&#xff09; 内存资源&#xff1a;32GB &#xff08;自己nuc机器32G内存&#xff09; 实验软件版本&#xff1a; 工具名称Version描述信息…

【正点原子STM32连载】第五十八章 T9拼音输入法实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第五…

Kubernetes - HPA-VPA - metrics介绍和安装 - HPA实验

目录 参考文章&#xff1a;(97条消息) Kubernetes-自动扩展器HPA、VPA、CA_hpa vpa_SRE运维充电站的博客-CSDN博客 HPA VPA 官方网址&#xff1a;autoscaler/vertical-pod-autoscaler at master kubernetes/autoscaler GitHub HPA和VPA进行扩缩容的区别&#xff1a; me…

绿水青山,节水护水我先行

为了树立人人珍惜水&#xff0c;人人节约水的良好风尚 绿萝志愿团队在7月16日在常庄刺猬河开展了2023年卫生环保志愿活动主要项目是宣传节水&#xff0c;护水志愿活动。 早上志愿者们早早的来到刺猬河旁&#xff0c;用自己带的工具准备清理河道旁的垃圾。志愿者们顶着炎炎的烈日…