【Leetcode字符串/链表--大数加法】2.两数相加 67.二进制求和 / 剑指Offer II 002.二进制加法 415.字符串相加 / BM86.大数加法

这篇博客探讨了LeetCode的2.两数相加、67.二进制求和以及415.字符串相加等题目,主要介绍了解题策略,包括进位遍历法和使用Java BigInteger进行大数计算。对于进位遍历法,强调了处理链表长度不一致和从末尾开始遍历的重要性;而使用BigInteger则解决了数值溢出的问题。
摘要由CSDN通过智能技术生成

Leetcode 2.两数相加

1.问题描述

在这里插入图片描述
在这里插入图片描述

2.解决方案

解法一:进位遍历法

在这里插入图片描述

代码实现方面需要注意:
1.虚拟头节点别忘了
2.如果处理两个链表长度不一样的四条语句,非常优雅,如果其中一条链表为空了,相加是设为0,遍历时就不动了,也不用指向next了

while(l1!=null||l2!=null){
   
	int x=l1==null?0:l1.val;
	int y=l2==null?0:l2.val;

	if(l1!=null) l1=l1.next;
	if(l2!=null) l2=l2.next;
}


public class lc2 {
   
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
   
        //生成一个虚拟头节点
        ListNode Head = new ListNode();
        ListNode t=Head;
        //全局设置进位数
        int carry=0;
        //有一个不空就继续,如果是空了就设为0
        while(l1!=null||l2!=null){
   
            int x=l1==null?0:l1.val;
            int y=l2==null?0:l2.val;
            int sum=x+y+carry;
            carry=sum/10;
            ListNode node=new ListNode(sum%10);
            t.next=node;
            t=node;

            if(l1!=null) l1=l1.next;
            if(l2!=null) l2=l2.next;
        }
        if(carry==1) t.next=new ListNode(1);
        return Head.next;
    }
}



解法二:暴力法

1.思路就是把两个链表的数都求出来,然后相加为sum,然后取sum的每个位数然后构建新链表
2.问题在于ListNode中的val必须是int,因为这是人家规定好的,但是事实上其中一个链表表示的值可能long都不够,所以没办法把一个链表代表的数求出来,只能一位一位算
3.但是这个思路是没问题而且简单粗暴的,除了超大样例没发过之外,普通样例都过了

public class lc2 {
   
    public ListNode addTwoNumbers(ListNode l1, ListNode l2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值