【发布时间】:2017-09-05 10:46:48
【问题描述】:
我正在尝试使用以下程序计算给定字符串的排列总数:
计划
class Test{
public static void main(String[] args){
String str = "ABC";
int n = str.length();
//System.out.println(permute(str, 0, n-1));
permute(str, 0, n-1);
}
private static int permute(String str, int l, int r){
ArrayList<String> list=new ArrayList<String>();
if (l == r)
//System.out.println(str);
list.add(str);
else
{
for (int i = l; i <= r; i++)
{
str = swap(str,l,i);
permute(str, l+1, r);
str = swap(str,l,i);
}
}
/*for (int i=0;i<list.size() ;i++ ) {
System.out.println(list.get(i));
}*/
return list.size();
}
public static 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);
}
}
输出:0
我再次应用相同的方法来显示给定字符串的排列。以下程序显示了我的方法:
计划
class Test{
public static void main(String[] args){
String str = "ABC";
int n = str.length();
//System.out.println(permute(str, 0, n-1));
permute(str, 0, n-1);
}
private static void permute(String str, int l, int r){
ArrayList<String> list=new ArrayList<String>();
if (l == r)
//System.out.println(str);
list.add(str);
else
{
for (int i = l; i <= r; i++)
{
str = swap(str,l,i);
permute(str, l+1, r);
str = swap(str,l,i);
}
}
for (int i=0;i<list.size() ;i++ ) {
System.out.println(list.get(i));
}
//return list.size();
}
public static 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
我的疑问就在这里,当我尝试返回arraylist 的大小时,我得到0 作为我的输出,但是当我打印出list 的所有元素时,它显示了所有排列。
谁能解开我的疑惑?
【问题讨论】:
-
这是因为您在 permute 方法中创建了一个新的 List 对象。使您的列表成为全局变量。
-
您是否知道不需要生成所有排列来获取它们的数量?
-
感谢您的帮助!!
-
@MBo,不,我不知道我们可以在不生成所有排列的情况下获得排列的数量。你能告诉我怎么做吗?
-
@Pritom Mazumdar,我编辑了答案,你可以看看。
标签: java algorithm arraylist permutation