{A,B,C,D,E,F}如何列出这6个字母的所有可能不同的订单?
尝试随机生成一个字符串,如" ABDFEC"等等并添加到列表中,如果它已经在列表中跳过那个并且一次又一次地尝试。我能够找到600到700个,但不幸的是它坚持这些因为它找不到与以前不同的东西。
所以别担心这个愚蠢的想法。你的聪明才智是什么?请帮帮我
答案 0 :(得分:1)
这可以通过回溯来实现。有关以下代码的详细信息,请参阅链接program to print all permutations of a given string。
public class Permutation
{
public static void main(String[] args)
{
String str = "ABC";
int n = str.length();
Permutation permutation = new Permutation();
permutation.permute(str, 0, n-1);
}
/**
* permutation function
* @param str string to calculate permutation for
* @param l starting index
* @param r end index
*/
private void permute(String str, int l, int r)
{
if (l == r)
System.out.println(str);
else
{
for (int i = l; i <= r; i++)
{
str = swap(str,l,i);
permute(str, l+1, r);
str = swap(str,l,i);
}
}
}
/**
* Swap Characters at position
* @param a string value
* @param i position 1
* @param j position 2
* @return swapped string
*/
public String swap(String a, int i, int j)
{
char temp;
char[] charArray = a.toCharArray();
temp = charArray[i] ;
charArray[i] = charArray[j];
charArray[j] = temp;
return String.valueOf(charArray);
}
}
<强>输出:强>
ABC
ACB
BAC
BCA
CBA
CAB
答案 1 :(得分:0)
这可以通过使用回溯算法来完成
答案 2 :(得分:0)
您可以尝试使用以下内容:
public static ArrayList<String> combinations = new ArrayList<>();
public static void main(String[] args) {
char[] letters = {'A', 'B', 'C', 'D', 'E', 'F'};
computePermutation(letters, 0, letters.length);
Iterator<String> it = combinations.iterator();
while(it.hasNext())System.out.println(it.next());
System.out.println(combinations.size());
}
private static void computePermutation(char[] current, int startIndex, int endIndex) {
// Base case
if (startIndex == endIndex) {
combinations.add(new String(current));
} else {
//try to move the swap window from start index to end index
//i.e 0 to a.length-1
for (int x = startIndex; x < endIndex; x++) {
swap(current, startIndex, x);
computePermutation(current, startIndex + 1, endIndex);
swap(current, startIndex, x);
}
}
}
private static void swap(char[] a, int i, int x) {
char t = a[i];
a[i] = a[x];
a[x] = t;
}
另请参阅StackOverflow中的这个问题,因为它几乎完全相同: full reproduction
答案 3 :(得分:0)
在python中,我们可以使用itertools.permutations()来解决这个问题。
>>> import itertools
>>> x = itertools.permutations([1,2,3])
>>> for i in x:
print i
结果如下。
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)