ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Leet code - 2. Add Two Number - Java
    알고리즘/알고리즘 문제 복기 2021. 3. 8. 20:47

    leetcode.com/problems/add-two-numbers/

     

    Add Two Numbers - LeetCode

    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

     

     

    이전에 C++로 풀었던 것을 자바로 다시 한번 복기할겸 풀었다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    /**
     * 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) {
            ListNode head = new ListNode();
            ListNode cur_pointer = head;
            
            int carry = 0;
            
            while(l1 != null && l2 != null) {
                int added_val = l1.val + l2.val + carry;
                
                if(carry > 0)
                    carry = 0;
                
                
                if(added_val >= 10) {
                    added_val %= 10;
                    carry = 1;
                }
                
                cur_pointer.next = new ListNode(added_val);
                
                cur_pointer = cur_pointer.next;
                l1 = l1.next;
                l2 = l2.next;
            }
            
            while(l1 != null) {
                int added_val = l1.val + carry;
                
                if(carry > 0)
                    --carry;
                    
                if(added_val >= 10) {
                    added_val %= 10;
                    carry = 1;
                }
                
                cur_pointer.next = new ListNode(added_val);
                
                cur_pointer = cur_pointer.next;
                l1 = l1.next;
            }
            
            while(l2 != null) {
                int added_val = l2.val + carry;
                
                if(carry > 0)
                    --carry;
                
                if(added_val >= 10) {
                    added_val %= 10;
                    carry = 1;
                }
                
                cur_pointer.next = new ListNode(added_val);
                cur_pointer = cur_pointer.next;
                l2 = l2.next;
            }
            
            while(carry > 0) {
                cur_pointer.next = new ListNode(carry);
                carry = 0;
            }
            
            return head.next;
        }
    }
    cs

     

    다음과 같이 3항 연산자를 이용해 간단하게 풀이도 할 수 있는듯하다

     

    댓글

Designed by Tistory.