plus one
``` java
public class Solution {
public int[] plusOne(int[] digits) {
//http://blog.csdn.net/linhuanmars/article/details/22365957 这个解法比较简洁
// 类似 Add Two Numbers
int len = digits.length;
int carry =1;
for(int i=len-1;i>=0;i--){
int digit = (digits[i]+carry)%10;
carry = (digits[i]+carry)/10;
digits[i]=digit;
if(carry==0) return digits;
}
int[] addone = new int[len+1];
addone[0]=1;
return addone;
}
}
```
Add Binary
public class Solution {
// http://www.cnblogs.com/springfor/p/3889228.html, 和plus one 类似
public String addBinary(String a, String b) {
int m = a.length();
int n = b.length();
int carry =0;
int lm = Math.max(m,n);
String res = "";
for(int i=0;i<lm;i++){
int p=0, q=0; // p,q把两个string相关位置转换为数字,并且把短数组靠右后左面的空位置0
if(i<m){
p = a.charAt(m-1-i)-'0';
}else{
p = 0;
}
if(i<n){
q = b.charAt(n-1-i)-'0';
}else{
q = 0;
}
int tmp = p+q + carry;
carry = tmp/2;
// res = res+ tmp%2; // why is wrong? // res = res + tmp%2; // why is wrong? 因为是拼接string,不是加数字
res = tmp%2 + res; 所以往左拼接
}
return (carry==0)? res: "1"+ res;
}
}
```
Add Two Numbers
``` java
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode p = l1, q= l2;
ListNode head = new ListNode(0);
ListNode t = head;
int carry = 0;
while(p!=null || q!=null){
if(p!=null){
carry += p.val;
p = p.next;
}
if(q!=null){
carry += q.val;
q = q.next;
}
t.next = new ListNode(carry%10);
carry = carry/10;
t = t.next;
}
if(carry!=0) {
t.next = new ListNode(1);
}
return head.next;
}
```