两数相加

题目:

image-20200714180708553

我的解法:

  /**
    * @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--) {
             
版权声明:本文为aboysky原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/aboysky/p/13304193.html