当前位置: 首页 > news >正文

LeetCode第2题:两数相加及其变种(某大厂面试原题)

目录

一、原题题目回顾(LeetCode #2)

二、逆序版思路与代码(LeetCode 原题)

三、变种手撕原题:正序存储的两数相加

四、为什么不能直接从头加?

五、解法:使用栈


一、原题题目回顾(LeetCode #2)

题目原文(逆序版本):

给你两个 非空 的链表,表示两个非负整数。
它们的每位数字都是按照 逆序 的方式存储的,
并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。

示例

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807

二、逆序版思路与代码(LeetCode 原题)

链表是 逆序存储,也就是说最低位在最前面。
我们可以从头开始同时遍历两个链表,每次加上对应位与进位,构造新节点。

该题做法不难,其实就是直接从头到尾遍历各个链表,从左到右加即可

代码实现如下

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode dummy = new ListNode(-1);ListNode cur = dummy;int carry = 0;while (l1 != null || l2 != null || carry != 0) {int sum = carry;if (l1 != null) { sum += l1.val; l1 = l1.next; }if (l2 != null) { sum += l2.val; l2 = l2.next; }cur.next = new ListNode(sum % 10);cur = cur.next;carry = sum / 10;}return dummy.next;}
}

三、变种手撕原题:正序存储的两数相加

公司题中常见变体是:

链表从 高位到低位 存储数字,返回的结果也要保持正序。

例子如下

输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]
解释:7243 + 564 = 7807

四、为什么不能直接从头加?

正序的链表如下:

l1: 7 -> 2 -> 4 -> 3
l2:      5 -> 6 -> 4

如果从头开始加:

  • 先加高位 7 + 5 = 12,我们不知道后面是否还有进位;

  • 没法在事先就决定结果链表中高位的数。

 因此必须 从尾部(低位)开始加起

五、解法:使用栈

思路

  1. 把两个链表的所有节点值压入两个栈;

  2. 每次从栈顶取出一位进行相加;

  3. 生成新节点并头插到结果链表;

  4. 最后返回头节点。

代码实现如下

import java.util.Stack;class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {Stack<Integer> s1 = new Stack<>();Stack<Integer> s2 = new Stack<>();while (l1 != null) {s1.push(l1.val);l1 = l1.next;}while (l2 != null) {s2.push(l2.val);l2 = l2.next;}ListNode head = null;int carry = 0;while (!s1.isEmpty() || !s2.isEmpty() || carry != 0) {int sum = carry;if (!s1.isEmpty()) sum += s1.pop();if (!s2.isEmpty()) sum += s2.pop();ListNode node = new ListNode(sum % 10);node.next = head;head = node;carry = sum / 10;}return head;}
}

✅ 逆序版 —— 从头加,carry 向后传;
✅ 正序版 —— 从尾加,用栈或递归;

http://www.dtcms.com/a/545365.html

相关文章:

  • Java 字符编码全解析:从乱码根源到 Unicode 实战指南
  • SpringBoot 高效工具类大全
  • 自己做网站用软件wordpress电商优秀
  • 百度网站建设中的自由容器网站用哪个数据库
  • 入侵检测系统——HIDS和NIDS的区别
  • C语言多进程创建和回收
  • 仓颉编程语言:控制流语句详解(if/else)
  • 专利撰写与申请核心要点简报
  • AI搜索引擎num=100参数移除影响深度分析:内容标识与准确性变化
  • NJU-SME 人工智能(三) -- 正则化 + 分类 + SVM
  • 【数据库】表的设计
  • 深圳制作网站建设推广第一网站ppt模板
  • 点网站建设广州专业网站建设哪家公司好
  • 仓颉语言构造函数深度实践指南
  • DTAS 3D-尺寸公差分析定制化服务与解决方案的专家-棣拓科技
  • 永康营销型网站建设wordpress自定义作者连接
  • linux NFS(网络文件系统)挂载完整指南
  • 数字营销软件完整指南|CRM、CDP、自动化平台 2025
  • 企业级建模平台Enterprise Architect如何自动化生成报告
  • Chat2DB 学习笔记
  • 外国做爰网站小程序问答库
  • 关于网站建设方案的案例石家庄建站凡科
  • LeetCode 410 - 分割数组的最大值
  • Kotlin数据结构性能全解析
  • 搜索引擎网站优化和推广方案网站建设招标合同要求
  • coco json 分类标注工具源代码
  • 重学JS-012 --- JavaScript算法与数据结构(十二)正则表达式
  • 自己做网站还是公众号爱链网中可以进行链接买卖
  • maven中properties和dependencys标签的区别
  • 商丘市有没有做网站品牌宣传网站制作