Java 在字符串中生成字符组合不需要';我不能完全工作,为什么?
我试图生成字符串中所有字符的组合。第一个参数是给定的字符串,第二个参数是字母数。因此,Java 在字符串中生成字符组合不需要';我不能完全工作,为什么?,java,string,recursion,combinations,Java,String,Recursion,Combinations,我试图生成字符串中所有字符的组合。第一个参数是给定的字符串,第二个参数是字母数。因此,组合(“ab”,2)应该给我aa,ab,ba,bb,组合(“abc”,2)应该给我aa,ab,ac,ba,bb,bc,ca,cb,cc,等等 在第一种情况下,我的当前代码给出了aa、ab、bb(因此它跳过ba)。 这是我的代码: public static void combinations(String s, int n) { combinations(
组合(“ab”,2)
应该给我aa,ab,ba,bb
,组合(“abc”,2)
应该给我aa,ab,ac,ba,bb,bc,ca,cb,cc
,等等
在第一种情况下,我的当前代码给出了aa、ab、bb
(因此它跳过ba
)。
这是我的代码:
public static void combinations(String s, int n)
{
combinations(s,"",n);
}
public static void combinations(String s, String prfx, int n)
{
if(n == 0)
{
System.out.println(prfx);
}
else
{
for(int i = 0; i < s.length(); i++)
{
combinations(s.substring(i), prfx + s.charAt(i), n-1);
}
}
}
公共静态无效组合(字符串s,int n)
{
组合(s,“,n);
}
公共静态无效组合(字符串s、字符串prfx、整数n)
{
如果(n==0)
{
系统输出打印项次(prfx);
}
其他的
{
对于(int i=0;i
我做错了什么?如果你不只是给我一个正确的答案,还要给我一些解释,让我从中学习,我将不胜感激,因为我不太擅长递归。谢谢。问题的根源在于:
combinations(s.substring(i), prfx + s.charAt(i), n-1);
^^^^^^^^^^^^^^
您希望循环遍历字符串中的字符,并依次使用每个字符作为前缀,然后进行递归调用以构建字符串其余部分的组合。但是,如果只将原始字符串的子字符串传递到递归调用中,则不会生成所有可能的置换。在上面的例子中,正如您所观察到的,它跳过了“ba”,因为当循环到达字符串“ab”的第二个字符时(当循环计数器i
为1时),会进行以下递归调用:组合(“b”,“b”,“1”)
。只能生成“bb”,不能生成“ba”。如果它是组合(“ab”和“+”b”,1)
,则会得到预期的组合“ba”和“bb”
因此,您需要将整个字符串传递到每个递归调用中:
combinations(s, prfx + s.charAt(i), n-1);
这项工作:
public static void combinations(String s, int n) {
combinations(s, "", n);
}
public static void combinations(String s, String prfx, int n) {
if (n == 0) {
System.out.println(prfx);
}
else {
for (int i = 0; i < s.length(); i++) {
combinations(s, prfx + s.charAt(i), n - 1);
}
}
}
公共静态无效组合(字符串s,int n){
组合(s,“,n);
}
公共静态无效组合(字符串s、字符串prfx、整数n){
如果(n==0){
系统输出打印项次(prfx);
}
否则{
对于(int i=0;i