leetcode刷题日记——两数相加

[ 题目描述 ]:

[ 思路 ]:

  • 通过两个循环将 l1, l2存储的数字读出,然后求和,再将结果存储链表中

  • 由此发了一个问题,结果溢出,如果使用更大的 long 类型,后续不出所料,仍然超出

  • 所以只能转换思路

    /**

    • Definition for singly-linked list.
    • struct ListNode {
    • 复制代码
      int val;
    • 复制代码
      struct ListNode *next;
    • };
      /
      struct ListNode
      addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
      int num1=0,num2=0,res=0,index=0;
      while(l1){
      num1=num1+l1->valpow(10,index++);
      l1=l1->next;
      }
      index=0;
      while(l2){
      num2=num2+l2->val
      pow(10,index++);
      l2=l2->next;
      }
      res=num1+num2;
      struct ListNode* head=(struct ListNode*)malloc(sizeof(struct ListNode));
      struct ListNode* rear=head;
      if(res==0){
      rear->next=(struct ListNode*)malloc(sizeof(struct ListNode));
      rear=rear->next;
      rear->val=0;
      }else{
      while(res!=0){
      rear->next=(struct ListNode*)malloc(sizeof(struct ListNode));
      rear=rear->next;
      rear->val=res%10;
      res/=10;
      }
      }
      rear->next=NULL;
      return head->next;
      }
  • 既然不能一次性存储所有结果,那么就只能模拟加法器,一位一位的计算

  • 运行如下

    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    int carry=0;
    struct ListNode* head=(struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* rear=head;
    while(l1 || l2 || carry!=0){
    int num1=0,num2=0;
    if(l1){
    num1=l1->val;
    l1=l1->next;
    }
    if(l2){
    num2=l2->val;
    l2=l2->next;
    }
    carry+=num1+num2;
    rear->next=(struct ListNode*)malloc(sizeof(struct ListNode));
    rear=rear->next;
    rear->val=carry%10;
    carry/=10;
    }
    rear->next=NULL;
    return head->next;
    }

[ 官方题解 ]:

  • 方法一:模拟,具体思路同上
相关推荐
纪元A梦3 小时前
贪心算法应用:化工反应器调度问题详解
算法·贪心算法
深圳市快瞳科技有限公司4 小时前
小场景大市场:猫狗识别算法在宠物智能设备中的应用
算法·计算机视觉·宠物
liulilittle4 小时前
OPENPPP2 —— IP标准校验和算法深度剖析:从原理到SSE2优化实现
网络·c++·网络协议·tcp/ip·算法·ip·通信
superlls6 小时前
(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
java·数据结构·算法
田里的水稻7 小时前
C++_队列编码实例,从末端添加对象,同时把头部的对象剔除掉,中的队列长度为设置长度NUM_OBJ
java·c++·算法
纪元A梦7 小时前
贪心算法应用:保险理赔调度问题详解
算法·贪心算法
Jayden_Ruan8 小时前
C++逆向输出一个字符串(三)
开发语言·c++·算法
点云SLAM9 小时前
C++ 常见面试题汇总
java·开发语言·c++·算法·面试·内存管理
叙白冲冲9 小时前
哈希算法以及面试答法
算法·面试·哈希算法
YuTaoShao10 小时前
【LeetCode 每日一题】1277. 统计全为 1 的正方形子矩阵
算法·leetcode·矩阵