leetcode 算法题目学习笔记 - 序号2

news/2024/9/22 19:23:58

2. 两数相加

初始想法

暴力求解,将两个链表里面的数拿出来变成完整数字,求和,再转换为链表倒序存储

点击查看代码
class Solution {
public:int turnNumToDigits(long int num, int index){int digits{0};long long int buffer = num;for (int i = 0; i<index ; i++){digits = buffer % 10;buffer/=10;}return digits;}ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {long long int first{0};long long int last{0};long long int solve{0};for (int i = 0; l1 != nullptr ;i++) {first += l1->val * pow(10, i);std::cout<<"Current First: "<<first<<"\n";l1=l1->next;}for (int i = 0;l2 != nullptr; i++) {last += l2->val * pow(10, i);std::cout<<"Current Last : "<<last<<"\n";l2=l2->next;}solve = first + last;std::cout<<"Current solve: "<<solve<<"\n";ListNode* ptr = new ListNode;long long int counts{solve};ListNode* result = ptr;for (int i = 0;; i++) {if ((counts/=10)<0.1){ptr->val = turnNumToDigits(solve,i+1);break;}else{ptr->next = new ListNode;ptr->val = turnNumToDigits(solve,i+1);ptr = ptr->next;}//counts++;std::cout<<counts<<"\n";}std::cout<<std::endl;return result;}
};

思路很简单 但是简单的令人发笑
因为题目的边缘case给到的最大数字可以达到100位
long long int都存不下
所以必须找到一个办法保证不会溢出,也就是说不能把整个数字都存下来。
或者按照大部分人给的优质解答,他们将两个链表一位一位对比,一个节点一个节点的求和,再把结果存到另一个链表中
中间如果发生进位,就把进位存下来,下一次求和的时候会加上.

点击查看代码
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* head=new ListNode(-1);//存放结果的链表ListNode* h=head;//移动指针int sum=0;//每个位的加和结果bool carry=false;//进位标志while(l1!=NULL||l2!=NULL){sum=0;if(l1!=NULL){sum+=l1->val;l1=l1->next;}if(l2!=NULL){sum+=l2->val;l2=l2->next;}if(carry)sum++;h->next=new ListNode(sum%10);h=h->next;carry=sum>=10?true:false;}if(carry){h->next=new ListNode(1);}return head->next;}
};
作者:陈乐乐
链接:https://leetcode.cn/problems/add-two-numbers/solutions/4375/liang-shu-xiang-jia-by-gpe3dbjds1/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

模仿这个思路:

点击查看代码
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* head = new ListNode(-1);ListNode* ptr  = head;bool tag1{true},tag2{true};bool t1{true},t2{true};bool carry = false;int counts{0};do{int sum{0};tag1 = l1;tag2 = l2;//ptr=ptr->next;if(tag1){sum+=l1->val;t1 = l1->next;l1 = l1->next;}if(tag2){sum+=l2->val;t2 = l2->next;l2 = l2->next;}if(carry){ sum++;   carry = false; }if(sum>9){ sum-=10; carry = true ; }ptr->val=sum;printf("%d ",ptr->val);if((t1||t2)||carry){ptr->next=new ListNode(-1);}if(ptr->next)ptr=ptr->next;std::cout<<std::endl;}while(t1 || t2 || carry); return head;
}
};

解题成功 效果不是很好 还可以进一步优化

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

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

相关文章

[网鼎杯 2020 朱雀组]Nmap

这题考察的是nmap写一句话木马的知识 可以输入形如 <?php eval($_POST[1]);?> -oG 1.php 来写入一句话 经过测试这题过滤了php,我们就是用短标签绕过 -oG b.phtml ` 这段命令的作用是:将扫描结果保存到b.phtml中,同时这个phtml文件还包含了前面的一句话木马 目的就是…

电力煤矿液体泄漏识别系统

电力煤矿液体泄漏识别系统对电力煤矿危化品生产区域管道机械实时检测,当电力煤矿液体泄漏识别系统检测到机械管道出现液体泄漏时,系统立即抓拍存档并告警同步回传给报警信息给后台监控人员,让工作人员及时处理,电力煤矿液体泄漏识别系统实现危险区域跑冒滴漏异常自动监控抓…

河道水尺水位监测系统

河道水尺水位监测系统利用计算机视觉技术对河道湖泊水尺水位进行7*24小时全天候实时监测,当河道水尺水位监测系统监测到河道水位异常变化时,系统立即抓拍存档同步回传图片给后台监控平台,提醒后台工作人员及时处理异常情况,避免更大损失的发生。河道水尺水位监测系统适用于…

7-4DeepFM模型

DeepFM继承了Wide&Deep的主体结构,将高低特征进行融合。其主要创新点有2个。一是将Wide部分替换成了 FM结构,以更有效的捕获特征交互interaction;二是FM中的隐向量 和 Deep部分的 embedding 向量共享权重,减少模型复杂性。推荐系统和广告CTR预估主流模型的演化有两条主…

排水口排水识别系统

排水口排水识别系统基于Python基于YOLOv7深度学习的计算机视觉识别检测算法,排水口排水识别系统赋予传统监测系统智能检测能力提升企业污水排放监督管效率,7*24小时不间断准确判断检测场景内的是否出现排水口排水情况,减少后台监控人员的工作量,减少后台漏报误报产生的失误…

作业区域人数超员预警系统

作业区域人数超员预警系统利用现场已有摄像头对生产作业区域进行全天候不间断实时监测,一旦作业区域人数超员预警系统监测到作业区域人数超员时,立即进行抓拍存档并告知后台监控中心人员,提醒后台人员及时处理避免意外情况发生。作业区域人数超员预警系统对人数超员记录截图…

河道采砂船监测识别系统

河道采砂船监测识别系统通过计算机视觉深度学习技术对河道采砂区域进行实时监测,当河道采砂船监测识别系统监测到有采砂船通过停留非法采砂时,立即抓拍存档触发告警,同步回传给后台通知后台人员及时处理。河道采砂船监测识别系统对河道采砂区域进行7*24小时实时监测有效弥补…

仪表盘读数识别系统

仪表读数识别系统利用现场传统监控摄像头对仪表盘刻度数进行7*24小时实时读取,当仪表盘读数识别系统监测到仪表盘数据异常时,立刻推送给后台相关管理人员,工作人员在第一时间到现场进行处理,避免更大的损失发生。同时,将告警截图和视频保存到数据库形成报表。仪表盘读数识…