问题:给出一个数组,求出这个数组所有的最长上升子数组,并依次打印这些数组里面的值。
public static void main(String[] args) {
//这一行输入待测试的数组
int[] arr = {10,9,2,5,3,7,101,18,5,8,3,1,6,9,232,454,123,656,34};
List<String> data = new ArrayList<>();
findLIS(arr,0,new ArrayList<>(), data);
int max = data.stream().mapToInt(e->e.split(",").length).max().getAsInt();
List<String> result = data.stream().filter(e->e.split(",").length == max).collect(Collectors.toList());
result.forEach(e-> System.out.println(e));
}
public static void findLIS(int[] arr, int index, List<Integer> lis,List<String> data){
String lisStr = String.join(",", lis.stream().map(e->e+"").collect(Collectors.toList()));
if(index >= arr.length && !data.contains(lisStr)){
data.add(lisStr);
return;
}
for(int i=index;i<arr.length;i++){
List<Integer> temp = new ArrayList<>(lis);
if(lis.isEmpty()){
temp.add(arr[i]);
}else{
if(arr[i]>lis.get(lis.size()-1)){
temp.add(arr[i]);
}
}
findLIS(arr, i+1, temp, data);
}
}