求两数之和

(1)字符串表示两数

 题目:输入两个非空二进制字符串且只包含数字 1 和 0。返回两数之和;

    输入: a = "11", b = "1"
    输出: "100"

 1 class Solution {
 2     public String addBinary(String a, String b) {
 3         StringBuilder s=new StringBuilder();
 4         int len1=a.length()-1,len2=b.length()-1;
 5         int carry=0;
 6         while(len1>=0||len2>=0||carry!=0){
 7             int c1=len1<0?0:a.charAt(len1)-'0';
 8             int c2=len2<0?0:b.charAt(len2)-'0';
 9             int num=c1+c2+carry;
10             carry=num>=2?1:0;
11             num=num%2;
12             s.append(num);
13             len1--;
14             len2--;
15         }
16         return s.reverse().toString();
17     }
18 }

(2)以链表表示数

 题目:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。返回一个新的链表来表示它们的和。

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummyHead = new ListNode(-1), pre = dummyHead;
        int t = 0;
        while (l1 != null || l2 != null || t != 0) {
            if (l1 != null) {
                t += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                t += l2.val;
                l2 = l2.next;
            }
            pre.next = new ListNode(t % 10);
            pre = pre.next;
            t /= 10;
        }
        return dummyHead.next;
    }
}

 

posted on 2020-06-23 10:35  hdc520  阅读(282)  评论(0编辑  收藏  举报

导航