栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

两数相加(java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两数相加(java)


给出的两个数是正常的正序和倒序的加法区别如下:

如图不难看出,我们只需对对应的两个数相加再加上进位,在计算出下一位的进位即可。

到最后别忘了如果进位不为0,还要加上进位这个节点

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
       int carry = 0;
       ListNode head = null;
       ListNode cur = null;
       while(l1!=null || l2!=null){
           int n1 = l1 == null?0:l1.val;
           int n2 = l2 == null ? 0 : l2.val;
           int n = n1 + n2 + carry;
           if(head == null){
               head = cur = new ListNode(n%10); 
               
           }else{
               cur.next = new ListNode(n%10);  //给新链表添加节点
               cur = cur.next;
           }
           carry = n/10;
           if(l1 != null) l1 = l1.next;
           if(l2 != null) l2 = l2.next;

       }
       if(carry > 0) cur.next = new ListNode(carry); //如果最后的进位不是0,需要添加节点。
       return head;

    }
}

相似的题:

由于整数取最高位不方便,所以我们也将这两个数和上面的题一样按倒序算加法。

class Solution {
    public List addToArrayForm(int[] num, int k) {
        int carry = 0;
        List list = new ArrayList<>();
        int i = num.length - 1;
        while(i >= 0 || k > 0){
            int n1 = i >= 0 ? num[i] : 0;
            int n2 = k > 0 ? k%10 : 0;
            int n = n1 + n2 + carry;
            list.add(n%10); 
            carry = n/10;
            i--;
            k = k/10;
        }
        if(carry !=  0){
            list.add(carry);
        }
        Collections.reverse(list);
        return list;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/338207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号