leetcode-两数相加
我的解法:
/**
* @Description TODO
* @Param [l1, l2]
* @return arrays.addTwoNumbers.ListNode
* @date 2020/7/14 17:21
* @author huanl
*
* 思路:先把他全部拿出来,拿出来的时候用字符串的append函数连接起来,后面再用reverse去反转.在把他们相加的到的
* 数转换为StringBuilder类型,然后反转,然后在把他变成ListNode类型.
*
* 问题: 为什么要全部拿出来? 我们正常时候做加法,不就是从低位做起,然后有进位就记录一下,下一次添加上.现在链表他给我们就是已经弄好了的低位,
* 直接从低位开始相加就好了.
* 直接一个一个取然后加的话怎么判断他本身到底有没有值? 噢,直接判断这个节点是不是为null
* 加到最后可能最后一次的进位记录为一,怎么处理? 再在后面多加一个节点,将这个一记录上去.
*/
public ListNode addTwoNumber(ListNode l1, ListNode l2) {
//用StringBuilder取出l1和l2里面所有的
StringBuilder num1 = new StringBuilder();
StringBuilder num2 = new StringBuilder();
num1.append(l1.val);
num2.append(l2.val);
while (l1.next != null) {
num1.append(l1.next.val);
l1 = l1.next;
}
while (l2.next != null) {
num2.append(l2.next.val);
l2 = l2.next;
}
//反转为正常的顺序
num1 = num1.reverse();
num2 = num2.reverse();
//将两个字符串相加 (因为直接一次的话会超出int或者long的长度) 其实最好就是将他们逆转过来,这样才符合我们日常的加法
int[] nums = new int[(Math.max(num1.length(), num2.length())) + 1];
for (int i = 1; i <= (Math.max(num1.length(), num2.length())); i++) {
if (i>num1.length()){
nums[nums.length-i] = Integer.parseInt(String.valueOf(num2.charAt(num2.length()-i)));
}else if(i>num2.length()){
nums[nums.length-i] = Integer.parseInt(String.valueOf(num1.charAt(num1.length()-i)));
}else {
nums[nums.length-i] = Integer.parseInt(String.valueOf(num1.charAt(num1.length()-i))) + Integer.parseInt(String.valueOf(num2.charAt(num2.length()-i)));
}
}
//处理进位信息
for (int i = nums.length - 1; i > 0; i