您好我正在尝试找出一种有效的方法来获取字符串的所有排列,但也允许重复字符。 (例如,对于字符串“ab”,输出将是“aa,bb,ba,ab”)
我的代码正常工作而没有重复,但我不确定如何修改它以允许重复字符,而且似乎只是想方设法做到这一点而不重复字符。
以下是我的代码:
public static ArrayList<String> permutationsUnique(String word) {
ArrayList<String> result = new ArrayList<String>();
if (word.length() == 0) {
result.add(word);
return result;
} else {
for (int i = 0; i < word.length(); i++) {
String shorter = word.substring(0, i) + word.substring(i + 1);
ArrayList<String> shorterPermutations = permutationsUnique(shorter);
for (String s : shorterPermutations) {
result.add(word.charAt(i) + s);
}
}
return result;
}
}
如果有人能指导我朝着正确的方向前进,我真的很感激。
谢谢
答案 0 :(得分:2)
我知道这个问题很久以前就被问过了,但我只是在一个java程序上进行了整数的排列,允许重复。我把我的代码放在这里,万一有人需要它。
该程序可以生成指定长度的排列。即 对于整数1,2和lengthOfSinglePermutation = 2,输出应为 11 21 12 22
对于整数1,2和lengthOfSinglePermutation = 3,输出应为 111 211 121 221 112 212 122 222
希望这有帮助。
public class PermutationsWithRepetitions {
public static void main(String[] args) {
int[] input = { 1, 2 };
int lengthOfSinglePermutation = 3;
// we need to check number of unique values in array
Set<Integer> arrValues = new HashSet<Integer>();
for (int i : input) {
arrValues.add(i);
}
int noOfUniqueValues = arrValues.size();
int[] indexes = new int[lengthOfSinglePermutation];
int totalPermutations = (int) Math.pow(noOfUniqueValues, lengthOfSinglePermutation);
for (int i = 0; i < totalPermutations; i++) {
for (int j = 0; j < lengthOfSinglePermutation; j++) {
System.out.print(input[indexes[j]]);
}
System.out.println();
for (int j = 0; j < lengthOfSinglePermutation; j++) {
if (indexes[j] >= noOfUniqueValues - 1) {
indexes[j] = 0;
}
else {
indexes[j]++;
break;
}
}
}
}
}
答案 1 :(得分:1)
对不起,我之前的回答有些不相关。删除。这肯定会奏效: -
static void Recur(String prefix, String str)
{
if(prefix.length()==str.length())
{
System.out.println(prefix); return;
}
for(int i=0; i<str.length(); i++)
Recur(prefix+str.charAt(i),str);
}
public static void main (String[] args)
{
String str = "AB";
}
输出
AA
AB
BA
BB
答案 2 :(得分:0)
我还有一个使用char数组的解决方案,但是它适用于任何类型的数组。在这里,您可以添加列表并将元素添加到列表中,而不是打印字符(或所需的任何数据类型)。
static void permuteAll(char [] a)
{
permuteArray(a, new char[a.length], 0);
}
static void permuteArray(char [] a, char [] s, int j)
{
if(j == a.length)
{
System.out.println(new String(s));
return;
}
for(int i = 0; i < a.length; i++)
{
s[j] = a[i];
permuteArray(a, s, j+1);
}
}