The following solution for the Open the Lock problem is giving me Time Limit Exceeded...
Could somebody pls comment on this? What are the constrains for TLE? Wasn't able to find anything related with thid topic... Is it really that bad...? I dont think so.
'''
import java.util.*;
public class Solution {
public int openLock(String[] deadends, String target) {
Queue<int[]> queue = new LinkedList<>();
Set visited = new HashSet<>();
int[] combination = {0, 0, 0, 0};
queue.offer(combination);
visited.add(formatConvination(combination));
int levels = process(queue, Arrays.asList(deadends), visited, target, 0);
return levels;
}
private int process(Queue<int[]> queue, List deadends, Set<String> visited, String target, int level) {
Queue<int[]> nextLevel = new LinkedList<>();
for (int[] node : queue) {
String nodeStr = formatConvination(node);
if (deadends.contains(nodeStr)) {
continue;
}
if (nodeStr.compareTo(target) == 0) {
return level;
}
for (int j = 0; j < target.length(); j++) {
int[] up = makeMovementUp(node, j);
String upStr = formatConvination(up);
if (!deadends.contains(upStr) && !visited.contains(upStr)) {
nextLevel.offer(up);
visited.add(upStr);
}
int[] down = makeMovementDown(node, j);
String downStr = formatConvination(down);
if (!deadends.contains(downStr) && !visited.contains(downStr)) {
nextLevel.offer(down);
visited.add(downStr);
}
}
}
if (!nextLevel.isEmpty()) {
return process(nextLevel, deadends, visited, target, ++level);
} else {
return -1;
}
}
private String formatConvination(int[] combination) {
return String.format("%d%d%d%d", combination[0], combination[1], combination[2], combination[3]);
}
private int[] makeMovementUp(int[] combination, int position) {
int[] newCombination = Arrays.copyOf(combination, combination.length);
newCombination[position] = newCombination[position] == 9 ? 0 : newCombination[position] +1;
return newCombination;
}
private int[] makeMovementDown(int[] combination, int position) {
int[] newCombination = Arrays.copyOf(combination, combination.length);
newCombination[position] = newCombination[position] == 0 ? 9 : newCombination[position] -1;
return newCombination;
}}
'''