zoukankan      html  css  js  c++  java
  • 【LeetCode】2. 两数相加

    题目

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
     
    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
     
    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
     

    示例

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

    输出:7 -> 0 -> 8

    原因:342 + 465 = 807
     

    解题

    public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
    {
        //若其中一个链表是0,返回另外一个
        if (l1.val == 0 && l1.next == null) return l2;
    
        if (l2.val == 0 && l2.next == null) return l1;
    
        //个位相加
        var sum = l1.val + l2.val;
        var isAddOne = sum > 9;
        var result = new ListNode(isAddOne ? sum % 10 : sum);
        var current = result;
    
        //循环相加
        while (true)
        {
            l1 = l1?.next;
            l2 = l2?.next;
    
            if (l1 == null && l2 == null) break;
    
            sum = (l1?.val ?? 0) + (l2?.val ?? 0) + (isAddOne ? 1 : 0); //考虑进位
            isAddOne = sum > 9;
    
            current.next = new ListNode(isAddOne ? sum % 10 : sum);
            current = current.next;
        }
        //最高位若有进位
        if (isAddOne)
        {
            current.next = new ListNode(1);
        }
        return result;
    }

    相关知识

    1. 链表操作
     
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/add-two-numbers

  • 相关阅读:
    计算器
    安卓第四周作业
    安卓第三次作业
    补10.21
    补:10.21
    增删改查
    android-數據庫
    安卓 -登陆界面
    android 第Ⅱ次作业
    第一个java代码
  • 原文地址:https://www.cnblogs.com/WilsonPan/p/11681720.html
Copyright © 2011-2022 走看看