问题描述
最近收到了一个 DSA 面试问题,如下:
Q1 - 给定 5 个元素,即 1,2,3,4,5 打印 _ _ _ [3 个空格] [简单排列问题] 的所有可能的唯一组合
Q1 的后续工作 - 现在呈现如下输出
<URI>
[注意最后一个符号必须是句号而不是逗号]
1 2 3,1 2 4,1 2 5,1 3 2,1 3 4,1 3 5,1 4 2,1 4 3,1 4 5,1 5 2,1 5 3,1 5 4,2 1 3,2 1 4,2 1 5,2 3 1,2 3 4,2 3 5,2 4 1,2 4 3,2 4 5,2 5 1,2 5 3,2 5 4,3 1 2,3 1 4,3 1 5,3 2 1,3 2 4,3 2 5,3 4 1,3 4 2,3 4 5,3 5 1,3 5 2,3 5 4,4 1 2,4 1 3,4 1 5,4 2 1,4 2 3,4 2 5,4 3 1,4 3 2,4 3 5,4 5 1,4 5 2,4 5 3,5 1 2,5 1 3,5 1 4,5 2 1,5 2 3,5 2 4,5 3 1,5 3 2,5 3 4,5 4 1,5 4 2,5 4 3 .
此外,对新的或不同的解决方案持开放态度,但非常好奇是否有办法解决我提供的现有代码的问题。
解决方法
删除最后一个“,”字符和它后面的空格,并添加一个“.”。
class Main {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 6; j++) {
for (int k = 1; k < 6; k++) {
if (!(i == j || i == k || j == k)) { // No repetition allowed
stringBuilder.append(i + " " + j + " " + k + ",");
}
}
}
}
stringBuilder.delete(stringBuilder.lastIndexOf(","),stringBuilder.length());
stringBuilder.append(".");
System.out.print(stringBuilder.toString());
}
}
,
一些谷歌搜索将帮助您研究该主题。这是我发现的一篇文章,可以帮助您完成任务。
https://www.baeldung.com/java-combinations-algorithm
还要注意单词组合与排列的数学含义。在排列中,顺序很重要。
即1,2,3 和 3,1 是两种不同的排列。但相同的组合。