两个数相加:
1. 存在linkedlist
fakenode的引入
2. 存在String
实现时为了方便,把大数放在第一个变量上
-------------------------------------------------------------------------------------
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode res = new ListNode(0);
ListNode n = res;
int c = 0;
while (l1 != null && l2 != null) {
int a = l1.val + l2.val + c;
ListNode node = new ListNode(a % 10);
c = a / 10;
n.next = node;
n = n.next;
l1 = l1.next;
l2 = l2.next;
}
while (l2 != null) {
int a = l2.val + c;
ListNode node = new ListNode(a % 10);
c = a / 10;
n.next = node;
n = n.next;
l2 = l2.next;
}
while (l1 != null) {
int a = l1.val + c;
ListNode node = new ListNode(a % 10);
c = a / 10;
n.next = node;
n = n.next;
l1 = l1.next;
}
if (c != 0) {
ListNode node = new ListNode(c);
n.next =node;
}
return res.next;
}
}
精简版
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode res = new ListNode(0);
ListNode n = res;
int c = 0;
while (l1 != null || l2 != null) {
if (l1 != null) {
c += l1.val;
l1 = l1.next;
}
if (l2 != null) {
c += l2.val;
l2 = l2.next;
}
n.next = new ListNode(c%10);
n = n.next;
c /= 10;
}
if (c != 0) {
ListNode node = new ListNode(c);
n.next =node;
}
return res.next;
}
}
------------------------------------------------------------------------------------
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
public class Solution {
boolean hasCarry = false;
public String addBinary(String a, String b) {
if (a.length() < b.length()) {
String temp = b;
b = a;
a = temp;
}
String res = helper(a, b);
if (hasCarry) {
res = '1' + res;
}
return res;
}
public String helper(String a, String b){
int carry = 0;
String res = "";
for (int i = 0; i < b.length(); i++) {
int sum = Character.getNumericValue(a.charAt(a.length() - 1 - i))
+ Character.getNumericValue(b.charAt(b.length() - 1 - i)) + carry;
res = new String(sum % 2 + "") + res;
carry = sum / 2;
}
for (int j = b.length(); j < a.length(); j++) {
int sum = Character.getNumericValue(a.charAt(a.length() - 1 - j)) + carry;
res = new String(sum % 2 + "") + res;
carry = sum / 2;
}
if (carry > 0) hasCarry = true;
return res;
}
}