【发布时间】:2018-11-20 17:18:33
【问题描述】:
我试图使用 java 进行置换,我注意到我的代码适用于字符串,但相同的算法在数组上无法正常工作
这是字符串的代码
public static void Recurse(String s,int i)
{
for(int j=i;j<(s.length());j++)
{
s=Swap(s,i,j);
if(i<(s.length()-1))
{
Recurse(s,i+1);
}
if(i==(s.length()-1))
{
Display(s);
}
}
}
public static String Swap(String newString,int i,int j)
{
char newChar[]=newString.toCharArray();
char temp=newChar[i];
newChar[i]=newChar[j];
newChar[j]=temp;
return String.valueOf(newChar);
}
public static void Display(String s)
{
System.out.println(s);
}
public static void main(String args[])
{
String i=new String("123");
Recurse(i,0);
}
输出: 123 132 213 231 312 321 工作正常。
那么这里是数组的代码
public static void Recurse(int [] newArray,int i)
{
for(int j=i;j<newArray.length;j++)
{
Swap(newArray,i,j);
if(i<(newArray.length-1))
{
Recurse(newArray,i+1);
}
if(i==(newArray.length-1))
{
Display(newArray);
}
}
}
public static void Display(int [] Array)
{
for(int i: Array)
{
System.out.print(i);
}
System.out.println();
}
public static void main(String args[])
{
Recurse(new int[] {1,2,3},0);
}
输出 123 132 312 321 123 132
不能正常工作,所以我想知道这里出了什么问题。
【问题讨论】:
-
你能贴出
Swap方法的代码吗? -
我已经重新编辑了代码
-
您的
Array版本是否使用相同的Swap方法? -
不,数组是使用临时变量交换的,但字符串是不可变的,所以我必须转换为 charArray 然后返回一个新的字符串对象来交换字符串。
-
你应该避免 String -> char[] -> String 转换。只需对 char[] 和 from/to String 转换以及开头/结尾进行操作。
标签: java arrays string permutation