【LeetCode题库 - C#】2.两数相加

开发工具与关键技术: C#
作者:奶糖不甜
撰写时间:2022.3.7
    C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core之上的高级程序设计语言.并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM是直接集成的,而且它是微软公司 .NET windows网络框架的主角.

题目描述:

给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字.请你将两个数相加,并以相同形式返回一个表示和的链表.
你可以假设除了数字 0 之外,这两个数都不会以 0 开头,每个链表中的节点数都在范围[1, 100]之内.

示例:

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

最清晰解法:

链表的计算方法,首先想到的就是进位,设置进位值.由于题目表明链表是逆序相加,所以第一位也就是个位数先进行计算,更加方便确定是否有进位值。

设置进位值num,将每次l1, l2, num三个值加起来为mid,位数为mid%10,大于10则进位为mid/10,实例如下:

public class Solution {
    public ListNode AddTwoNumbers(ListNode l1, ListNode l2, int num = 0) 
    {
        if(l1 == null && l2 == null)
        {
            if(num != 0) return new ListNode(num);
            else return null;
        }

        int mid = (l1?.val ?? 0) + (l2?.val ?? 0) + num;
        ListNode listnode = new ListNode(mid % 10);
        listnode.next = AddTwoNumbers(l1?.next, l2?.next, mid/10);
        return listnode;
    }
}

:讲解一下问号的用法.

? 可空类型修饰符,使值类型也可为空.
a??b 空合并运算符,当a为null时则返回b,a不为null时则返回a本身.
?. null检查运算符,如果对象为NULL,则不进行后面的获取成员的运算,直接返回null.

在这里判断l1,l2是否为空,用于解决l1、l2链表长度不一样的情况.

你可能感兴趣的:(c#leetcode算法)