乐趣区

关于c#:LeetCode题库-C2两数相加

开发工具与关键技术: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 链表长度不一样的状况.

退出移动版