Add Two Numbers

题目

You are given two non-empty linked lists representing two non-negative integers. 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.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

问题描述:
给定两个非空的非负数链表。每个节点包含一个数字,按照相反的顺序获取并转化为数字求和
可以假定除了个位位其他位不为0

Example

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

题目分析

/**
    简单翻译 :
        给定两个非空的非负数的数字链表, 将其转数字相加后,将其相加和专为反向链表返回 
        input: 2  ----> 4---->3  + 5--->6---->4  
        运算: 342 + 465 = 807
        output: 7---->0----->8


问题重点:
    1. 两个链表 
    2. 非空非负整数的 
    3. 每个节点包含一个数字
    4. 相反的顺序获取

问题疑点: 
    1. 两个链表的位数相同吗 ,不同该怎么处理,高位补0吗? 


解题思路:
    1. 将链表反向遍历转为字符串 
    2. 将字符串转为int 类型 
    3. sum int 类型 
    4. 反向获取int 类型的值转链表 
 */

题解



/**
    version 1
 */

class Solution_v1{
    private ListNode first;

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int lint1 =  listToInt(l1);
        int lint2 = listToInt(l2);
        return first;
    }

    private  int listToInt(ListNode l ){
        String str = "";
        while(l.next != null){
            str += String(l.next.data);
        }
        // string to int
    }

    private ListNode intToList(int sum){
        ListNode list = null;
        while(sum > 0){
            i = sum %10;
            ListNode node = new ListNode(i);
            node.pre = first;
            first.next = node;
            first = node;
            sum = sum / 10;
        }
    }

    class ListNode {
        ListNode next;
        ListNode pre;
        int data;
    } 
}   

/**
    总结:
        通过以上方式结题的时间复杂度 可能为 O(1) 不过可能会有变化 

        以上方式虽然可以解决问题,不过会需要其他的辅助行为
 */

/*-------------------------------------------------------*/
/**
    version 2
 */
 /**
    解题思路: 
        因为针对问题的分析是链表反过来用每位相加的方式,如果大于0 那么久进1 
        用其结果再次组织为一个链表  

        0. 一个临时变量,一个新的链表
        1. 反向遍历链表 
        2. 将链表的反向对应位置数字相加 
        3. 判断 临时变量 m 是否 > 0 
        4. 判断数字和其是否大于10 ,如果不大于10 
        5. 如果 3 成立 , 在 4 基础上加 1 ,并至 临时变量 m = 0;
        6. 如果5 成立, 那么临时变量 m  = 1 ; 并以 5 个位创建节点
        7.  


  */
public Solution_v2{
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int m = 0;
        ListNode dum = new ListNode(0);



    }

    class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
    }
}



/**
    算法总结: 

 */


/** 
 * 
 * 算法测试
 * 
 */

class Test {
    public static void main(String[] args) {
        System.out.println("测试结果"); 
        String str = "abacdefgeabcdef";


    }
}
Copyright © 抓🐱的🐟.com 2017 all right reserved,powered by Gitbook该文件修订时间: 2020-03-13 07:05:40

results matching ""

    No results matching ""