求两数之和
(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; } }