Return 类数组的所有子序列,在 Java 中只有连续值
Return all subsequences of an array-like with only consecutive values in Java
我在 Java 中尝试解决的问题需要将输入数组划分为所有允许的子序列,其中允许的子序列仅包含连续值。例如,我想要 {A,E,D} 到 return {A,E,D},{A,E},{A},{E,D},{D},{E}
这与 this question 的不同之处在于(对于上面的示例)
1) 我有 'consecutive value' 规则,这意味着 {A,D} 是不允许的并且
2) 我不能依赖此处答案中的 Python 语法。
我的问题特别是如何将 'consecutive value' 规则应用于更一般的子序列问题。
到目前为止,我已经为示例{1,2,3}提出了一种算法:
1.复制{1,2,3}并存入arr
2.将{1,2,3}附加到解决方案中,剥离3
3.将{1,2}附加到解决方案,剥离2
4. 将 {1} 附加到解决方案。从 arr
中切 1
5. 追加{2,3}解剥离3
6. 将 {2} 附加到解决方案。从 arr
中删去 2
7. 将 {3} 附加到解决方案
您应该能够简单地使用两个嵌套的 for 循环,如下所示:
// Setup
char[] arr = { 'A', 'E', 'D' };
// Generate all subsequences
List<char[]> result = new ArrayList<>();
for (int start = 0; start < arr.length; start++) {
for (int end = start + 1; end <= arr.length; end++) {
result.add(Arrays.copyOfRange(arr, start, end));
}
}
// Print result
result.forEach(a -> System.out.println(Arrays.toString(a)));
输出:
[A]
[A, E]
[A, E, D]
[E]
[E, D]
[D]
我在 Java 中尝试解决的问题需要将输入数组划分为所有允许的子序列,其中允许的子序列仅包含连续值。例如,我想要 {A,E,D} 到 return {A,E,D},{A,E},{A},{E,D},{D},{E}
这与 this question 的不同之处在于(对于上面的示例)
1) 我有 'consecutive value' 规则,这意味着 {A,D} 是不允许的并且
2) 我不能依赖此处答案中的 Python 语法。
我的问题特别是如何将 'consecutive value' 规则应用于更一般的子序列问题。
到目前为止,我已经为示例{1,2,3}提出了一种算法:
1.复制{1,2,3}并存入arr
2.将{1,2,3}附加到解决方案中,剥离3
3.将{1,2}附加到解决方案,剥离2
4. 将 {1} 附加到解决方案。从 arr
中切 1
5. 追加{2,3}解剥离3
6. 将 {2} 附加到解决方案。从 arr
中删去 2
7. 将 {3} 附加到解决方案
您应该能够简单地使用两个嵌套的 for 循环,如下所示:
// Setup
char[] arr = { 'A', 'E', 'D' };
// Generate all subsequences
List<char[]> result = new ArrayList<>();
for (int start = 0; start < arr.length; start++) {
for (int end = start + 1; end <= arr.length; end++) {
result.add(Arrays.copyOfRange(arr, start, end));
}
}
// Print result
result.forEach(a -> System.out.println(Arrays.toString(a)));
输出:
[A]
[A, E]
[A, E, D]
[E]
[E, D]
[D]