Lexicographical Numbers LeetCode solution in Java

1
class Solution {
2

3
private final TrieNode trie = new TrieNode(' ');
4

5
class TrieNode {
6

7
private Character digit;
8
private String value;
9
private boolean isWord;
10
private Map<Character, TrieNode> children;
11

12
TrieNode(Character c) {
13
this.digit = c;
14
this.isWord = false;
15
this.children = new HashMap<>();
16
}
17

18
void insert(String s) {
19
TrieNode current = this;
20
for (Character c : s.toCharArray()) {
21
current = current.children.computeIfAbsent(c, k -> new TrieNode(c));
22
}
23
current.value = s;
24
current.isWord = true;
25
}
26

27
List<Integer> getWordsPreOrder() {
28
return getWordsPreOrder(this);
29
}
30

31
private List<Integer> getWordsPreOrder(TrieNode root) {
32
List<Integer> result = new ArrayList<>();
33
if (root == null) {
34
return result;
35
}
36

37
if (root.isWord) {
38
result.add(Integer.parseInt(root.value));
39
}
40
for (TrieNode node : root.children.values()) {
41
result.addAll(getWordsPreOrder(node));
42
}
43
return result;
44
}
45
}
46

47
public List<Integer> lexicalOrder(int n) {
48
for (int i = 1; i <= n; i++) {
49
trie.insert(String.valueOf(i));
50
}
51
return trie.getWordsPreOrder();
52
}
53
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0