如何在递归函数中存储数组?

时间:2014-05-10 06:25:21

标签: java arrays permutation

我有一个排列递归数组,工作正常,但我需要存储结果不只是打印出来,我必须将每个打印存储在一个单独的数组中或整个存储在一个数组中

这是原作:

public static void Permute(String soFar, String rest)  
        {  
           if (rest.isEmpty())  
           {
               System.out.println(soFar);  

           }           
            else  
           {  
               for (int i =0; i < rest.length(); i++)  
                {  
                    String next = soFar + rest.charAt(i);  
                    String remaining  = rest.substring(0,i) + rest.substring(i+1);  
                    Permute(next,remaining);  
                }  
           }  
        }  

我改变了它,但问题是返回arr不合适,我应该做其他事情 因为arr会变空,因为会调用其他递归函数而我不想要它

public static String Permute(String soFar, String rest,String arr)  
    {  
       if (rest.isEmpty())  
       {
        //   System.out.println(soFar);  
       arr+=soFar;
       }           
        else  
       {  
           for (int i =0; i < rest.length(); i++)  
            {  
                String next = soFar + rest.charAt(i);  
                String remaining  = rest.substring(0,i) + rest.substring(i+1);  
                Permute(next,remaining,arr);  
            }  
       }  
    return arr;
    }  

2 个答案:

答案 0 :(得分:1)

单向;

  1. 创建List类型的实例变量:List<String> myList = new ArrayList<String>();
  2. System.out.println(soFar);替换为myList.add(soFar);
  3. 可能最后将您的列表转换为数组:String[] arr = (String[]) myList.toArray();

答案 1 :(得分:1)

将您的arr参数更改为列表。然后代替println()继续添加到此List。此外,当您第一次调用置换时,请确保传入已分配的列表。像这样:

public void ParentFunction()
{
    List<String> results = new ArrayList<String>();
    Permute(..., ..., results);
    // Now you have all results inside "results" variable.
}

public static void Permute(String soFar, String rest, List<String> results)  
{
    if (rest.isEmpty())  
    {
        //System.out.println(soFar);  
        results.add(soFar); // ADD TO RESULT LIST
    }           
    else  
    {  
        for (int i = 0; i < rest.length(); i++)  
        {  
            String next = soFar + rest.charAt(i);  
            String remaining  = rest.substring(0, i) + rest.substring(i + 1);  
            Permute(next, remaining, results);  
        }  
    }
}