写点什么

LeetCode 第二题,裂开了

作者:为自己带盐
  • 2022 年 7 月 12 日
  • 本文字数:1018 字

    阅读完需:约 3 分钟

前言

这几天状态不太好,日更真的非常勉强,本来按计划,今天的时间也很充裕,可以安心做好今天的算法题,然后总结思路,分享过程。结果又是一堆突发情况啊,哎不说了,看题吧


题目

今天这个题目,官方给了个中等的难度。

具体题目在这里,我这里也简单罗列下

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

题目给的用例就是

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

大概就是这样


我自己的解法

按照惯例,我还是现在本地的控制台跑了一下。

官方这个其实不是完整的代码,它给你的例子里,已经帮你定义好单链表的数据结构了,但在本地实现的话,这个构造过程其实是要自己实现一下的。

看下代码

public class ListNode {    public int val;    public ListNode next;    public ListNode(int val=0, ListNode next=null) {        this.val = val;        this.next = next;    }
public void CreateListTail() { ListNode p = next; Console.WriteLine("请输入链表第一个值"); int d = Int32.Parse(Console.ReadLine()); while (d != -1) { ListNode s = new ListNode(d); if (next == null) next = s; else p.next = s; p = s; Console.WriteLine("请输入链表下一个值,按-1结束"); d = Int32.Parse(Console.ReadLine()); } } }
复制代码

这样就可以在本地控制台通过输入来构造一个链表了,构造完成后,把链表输出出来,就像这样

构造好结构之后,开始解题。

我的解题思路就是,把构造好的两个链表,先转换成字符,注意构造字符串的时候,注意是在头部依次插入链表的值,这样确保最后转换成整型的时候,是倒序的。

if (l1!=null) {  ListNode tmp = l1.next;  while (tmp != null)  {    sb1.Insert(0, tmp.val);    tmp = tmp.next;                  }  l1Num = long.TryParse(sb1.ToString(), out l1Num) ? l1Num : 0;}
复制代码


同样两个链表都这样构造好后,计算好最终结果,在倒序输出


发布于: 刚刚阅读数: 4
用户头像

学着码代码,学着码人生。 2019.04.11 加入

狂奔的小码农

评论

发布
暂无评论
LeetCode第二题,裂开了_7月月更_为自己带盐_InfoQ写作社区