JAVA-알고리즘 Leetcode(Medium)-add Two Numbers
포스트
취소

JAVA-알고리즘 Leetcode(Medium)-add Two Numbers

Question

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 contains a single digit. Add the two numbers and return the sum as a linked list.

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

대충 해석

음이 아닌 정수를 가지고 있는 두 LinkedList가 주어지며 이들의 합을 리턴하세요. 각 자리의 수가 역순으로 되어있으며 각 노드는 1의 자리 수입니다.

Example

1
2
3
4
5
6
7
8
9
10
11
12
#1
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.

#2
Input: l1 = [0], l2 = [0]
Output: [0]

#3
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]

고려해야할 부분

l1과 l2의 길이가 다를 수 있다는 점을 고려, null체크만 유의한다면 수월하게 풀 수 있다.
Iteration으로 문제에 접근하였는데 Leetcode의 다른 사람들 풀이도 참고해보니 Recursion으로도 접근할 수 있었다.
Recursion을 선호하지 않아서 미처 고려하지 못했던 접근법이었다.
***

Solution 1

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
// 2. add Two Numbers
public class AddTwoNumbers {
	
	int val;
	AddTwoNumbers next;
	AddTwoNumbers() {}
	AddTwoNumbers(int val) {this.val = val;}
	AddTwoNumbers(int val, AddTwoNumbers next) {this.val = val; this.next = next;}

	public static void main(String[] args) {
		// LeetCode Medieum
		AddTwoNumbers l1 = null;
		AddTwoNumbers list1 = new AddTwoNumbers(9);
		l1 = list1;
		
		AddTwoNumbers l2 = null;
		AddTwoNumbers list2 = new AddTwoNumbers(1);
		l2 = list2;
		list2.next = new AddTwoNumbers(9);
		list2 = list2.next;
		list2.next = new AddTwoNumbers(9);
		list2 = list2.next;
		list2.next = new AddTwoNumbers(9);
		
		
		AddTwoNumbers result = addTwoNumbers(l1, l2);
		
		while(result != null) {
			System.out.println(result.val);
			result = result.next;
		}

	}
	
	public static AddTwoNumbers addTwoNumbers(AddTwoNumbers l1, AddTwoNumbers l2) {
		
		// 1 10 100 1000 10000
		AddTwoNumbers answerNode = new AddTwoNumbers(0);
		AddTwoNumbers temp = answerNode;
		
		int nodeVal = 0;
		int sum = 0;
		
		while(l1 != null || l2 != null) {
			if(l1 != null) {
				sum += l1.val;
				l1 = l1.next;
			}
			if(l2 != null) {
				sum += l2.val;
				l2 = l2.next;
			}
			
			nodeVal = sum %10;
			
			temp.next = new AddTwoNumbers(nodeVal);
			temp = temp.next;
			
			sum /= 10;
			
		}
		if(sum != 0) temp.next = new AddTwoNumbers(sum);
		
		return answerNode.next;
	}

}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

JAVA-알고리즘 Leetcode(Easy)-Valid Parentheses

JAVA-알고리즘 Leetcode(Easy)-Merge Two Sorted Lists