题目 | ||
---|---|---|
415 Add Strings | ||
67 Add Binary | ||
2 Add Two Numbers | ||
445 Add Two Numbers II | ||
66 Plus One |
相加问题
类似的问题形成自己的模版,方便复习记忆.
以上题目的模版相似度大概有80%
public class AddStrings {
public String addStrings(String num1, String num2) {
int len1 = num1.length();
int len2 = num2.length();
int i = len1 - 1, j = len2 - 1;
int over = 0;
StringBuilder sb = new StringBuilder();
while (i >= 0 || j >= 0) {
int a = i >= 0 ? num1.charAt(i--) - '0' : 0;
int b = j >= 0 ? num2.charAt(j--) - '0' : 0;
sb.append((a + b + over) % 10);
over = (a + b + over) / 10;
}
if (over > 0) {
// 9 + 9 = 18
sb.append(1);
}
return sb.reverse().toString();
}
public static void main(String[] args) {
System.out.println(new AddStrings().addStrings("584", "18"));
}
}
public int[] plusOne(int[] digits) {
LinkedList<Integer> list = new LinkedList<Integer>();
int plus[] = new int[]{1};
int i = digits.length-1, j = plus.length-1;
int over = 0;
while (i >= 0|| j >= 0) {
int a = (i >= 0) ? digits[i--] : 0;
int b = (j >= 0) ? plus[j--] : 0;
int sum = (a + b + over) % 10;
over = (a + b + over) / 10;
list.addFirst(sum);
}
if (over == 1) {
list.addFirst(1);
}
int[] res = new int[list.size()];
int k=0;
for(int num :list){
res[k++]=num;
}
return res;
}