Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的递归字谜_Java_List_Recursion_Arraylist - Fatal编程技术网

java中的递归字谜

java中的递归字谜,java,list,recursion,arraylist,Java,List,Recursion,Arraylist,我在实现在给定字符串中查找字谜的算法时遇到困难。下面的方法没有返回正确的输出。例如,给定单词“abc”,它返回[abc,bc,c,bc,bc,c]。当它真的应该是[abc,bac,bca,acb,cab,acb] private List<String> anagramizeRecursive(String word) { if(word.length() == 0) { return null; } else { for(in

我在实现在给定字符串中查找字谜的算法时遇到困难。下面的方法没有返回正确的输出。例如,给定单词“abc”,它返回[abc,bc,c,bc,bc,c]。当它真的应该是[abc,bac,bca,acb,cab,acb]

private List<String> anagramizeRecursive(String word) {
    if(word.length() == 0) {
        return null;
    }
    else {
        for(int i = 0; i < word.length()-1; i++) {
            unfiltered.add(word.substring(i));
            anagramizeRecursive(word.substring(i+1));
            unfiltered.add(word.substring(i+1));
        }
    }
    return unfiltered;
}
private List anagramizerescursive(字符串字){
if(word.length()==0){
返回null;
}
否则{
for(int i=0;i
对于原始字符串中的每个字符,您希望将该字符移到前面,然后将其添加到由其余字符串生成的所有字谜中

List<String> anagramRecursive(String word)
  result = empty list
  if word.isEmpty() result.add("")
  else 
    for each character c in word
      for each item in anagramRecursive(word-c)
        result.add(c + item)
  return result
List anagramRecursive(字符串字)
结果=空列表
if word.isEmpty()结果.add(“”)
其他的
对于word中的每个字符c
对于anagramRecursive(word-c)中的每个项目
结果。添加(c+项)
返回结果
构造递归还有很多其他方法,但这与您已有的方法最为相似。

From

私有静态无效置换(字符串候选,字符串剩余)
{
if(剩余.length()==0){
系统输出打印项次(候选);
}
对于(int i=0;i
未筛选的
列表在哪里被实例化?您期望的输出是什么?@JorgeCampos它是一个类变量它是一个数组列表strings@Masud它缺少前面有a的字谜,我假设因为bc和c是重复的,你确定你在试图找到字谜吗?如果是这样,您可能需要沿着递归帧传递一些列表。要做到这一点,我需要将word转换为字符数组并循环遍历每个字符吗?
private static void permutations(String candidate, String remaining)
        {
            if (remaining.length() == 0) {
                System.out.println(candidate);
            }
    
        for (int i = 0; i < remaining.length(); i++)
        {
            String newCandidate = candidate + remaining.charAt(i);

            String newRemaining = remaining.substring(0,i) + remaining.substring(i + 1);

            permutations(newCandidate, newRemaining);
        }
    }

public static void main(String[] args)
    {
        String s = "ABC";
        permutations("", s);
    }