이유's STUDY/알고리즘 문제풀이

[Leetcode] Add two numbers

살아가는 이유_EU 2022. 11. 1. 10:46
728x90
반응형

리트코드 - 링크드인을 사용하여 add tow numbers 를 진행함

 

1st. Try. 먼가 코드가 엄청 지저분해지고 조건문 이것저것이다... 

결국 하루 동안 고민하다가 답지를 보게 됨. 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
     
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    //sum listnode 
    ListNode sumNode = new ListNode(0);
    ListNode totalNode = new ListNode(0);
    
    int add=0;
    
    int i=0;
    while(l1 !=null || l2 !=null) {
        int a,b =0;
        int sum =0;
        a = l1.val;
        if(l2!=null)
            b = l2.val; 
        sum = a+b;
        
        if(add>0) {
            sum+= add;
            add =0;
        }
                
        if(sum >=10) {
            sum = sum -10;
            add +=1;
        }
        //해당 sumNode 에 대한 val 값을 입력 
        System.out.println(sum);
        sumNode.val = sum;
        System.out.println("sumNode"+sumNode.val);
        if(i==0)
        {
            totalNode = sumNode;
        }
        if(l1.next!= null || l2.next!= null) {
            ListNode nextNode = new ListNode(0);
  
        sumNode.next = nextNode;
        System.out.println("nextNode"+nextNode.val);

        sumNode = sumNode.next;
        }
        
        i++;
        l1 = l1.next;
        if(l2!=null)
            l2 = l2.next;
        
        //System.out.println("totalNode"+totalNode.val);
     }
     return totalNode;
    }

}

 

 

----참고하게 된 사이트 답지 내역

(3) Simple Solution - Add Two Numbers - LeetCode Discuss

 

Simple Solution - Add Two Numbers - LeetCode Discuss

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode ret = new ListNode(0);
ListNode opr = new ListNode(0);
opr = ret;
int sum = 0;

 while(l1 != null || l2 != null || sum != 0){
     if(l1 != null){
         sum = sum + l1.val;
         l1 = l1.next;
     }
     if(l2 != null){
         sum = sum + l2.val;
         l2 = l2.next;
     }
     opr.next = new ListNode(sum%10);
     sum = sum/10;
     opr = opr.next;
 }
 return ret.next;
}

 

ToDO : [ 다시 한번 위 답안 고쳐서 풀기]/// 

- ADD 변수를 굳이 추가하지 않고/ 이제 마지막을 SUM  에 대한 변수로 통일화

- 그리고 IF 문 최대한 적게 쓰기 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
     
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    //sum listnode 
    ListNode sumNode = new ListNode(0);
    ListNode totalNode = new ListNode(0);
        
    //마지막에 이제 한 노드를 빼기가 어려우니 처음 노드를 빼는 것처럼 한다. . 
    totalNode = sumNode; 
    int add=0;
    int sum = 0; 
    int i=0;
    while(l1 !=null || l2 !=null || sum!=0 ) {
        int a =0;
        int b =0;
        if(l1!=null){
        a = l1.val;    
        l1 = l1.next;
        }
        
        if(l2!=null) {
        b = l2.val;     
        l2=l2.next;
        }
        
        sum += a+b;
        
        ///이 ADD 변수를 빼야 됬었다... 
//         if(add>0) {
//             sum+= add;
//             add =0;
//         }
                
//         if(sum >=10) {
//             sum = sum -10;
//             add +=1;
//         }
        //해당 sumNode 에 대한 val 값을 입력 ---바로 입력하는 것이 아니라 nextNode 에 대한 값을 입력 
        
        sumNode.next = new ListNode(sum%10);
        sum=sum/10;
        sumNode = sumNode.next;
        i++;
        
        //System.out.println("totalNode"+totalNode.val);
     }
     return totalNode.next;
    }

}

 

-----add 변수 추가해서 다시 풀이

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
     
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    //sum listnode 
    ListNode sumNode = new ListNode(0);
    ListNode totalNode = new ListNode(0);
        
    //마지막에 이제 한 노드를 빼기가 어려우니 처음 노드를 빼는 것처럼 한다. . 
    totalNode = sumNode; 
    int add=0;
    int sum = 0; 
    int i=0;
    while(l1 !=null || l2 !=null ) {
        sum =add;
        
        if(l1!=null){
        sum+= l1.val;    
        l1 = l1.next;
        }
        
        if(l2!=null) {
        sum+= l2.val;     
        l2=l2.next;
        }       

        if(add>0) {
            add =0;
        }
                
        if(sum >=10) {
            sum = sum -10;
            add +=1;
        }
        //해당 sumNode 에 대한 val 값을 입력 ---바로 입력하는 것이 아니라 nextNode 에 대한 값을 입력 
        
        sumNode.next = new ListNode(sum);
        sumNode = sumNode.next;
        
        //System.out.println("totalNode"+totalNode.val);
     }
       
        if(add ==1){
            sumNode.next = new ListNode(1);
        }
        
     return totalNode.next;
    }

}
728x90
반응형