import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class Main {
public static HashSet<String> set = new HashSet<>();
public static String fun(List<Integer> list) {
StringBuilder sb = new StringBuilder();
for (Integer i : list) {
sb.append(i);
}
return sb.toString();
}
public static void DFS(int[] arr, int pos, List<Integer> res) {
if (pos == arr.length) {
if (res.size() > 0) {
String ans = fun(res);
if (!set.contains(ans)) {
System.out.println(res);
set.add(ans);
}
}
return;
}
if (res.size() == 0) {
// no join
DFS(arr, pos + 1, res);
// join
List<Integer> newList = new ArrayList<>(res);
newList.add(arr[pos]);
DFS(arr, pos + 1, newList);
} else {
int last = res.get(res.size() - 1);
if (last <= arr[pos]) {
// no join
DFS(arr, pos + 1, res);
// join
List<Integer> newList = new ArrayList<>(res);
newList.add(arr[pos]);
DFS(arr, pos + 1, newList);
} else {
// no join
DFS(arr, pos + 1, res);
}
}
}
public static void main(String[] args) {
int arr[] = new int[]{4, 6, 7, 7};
DFS(arr, 0, new ArrayList<>());
}
}
面试中没写出来的原因总结:
1. 太紧张
2. 不适应牛客上的网页编程
3. 边界条件没写好