0

嗨,在这个递归方法中,我试图找到所有字谜并将其添加到列表中>但是当我运行此代码时会发生什么,它只是返回了很多空列表。

      private List<List<String>> findAnagrams(LetterInventory words,
        ArrayList<String> anagram, int max,
        Map<String, LetterInventory> smallDict, int level, List<List<String>> result) {

    ArrayList<String> solvedWord = new ArrayList<String>();
    LetterInventory shell;
    LetterInventory shell2;
    if (level < max || max == 0) {
        Iterator<String> it = smallDict.keySet().iterator();
        while (it.hasNext()) {
            String k = it.next();
            shell = new LetterInventory(k);
            shell2 = words;
            if (shell2.subtract(shell) != null) {
                anagram.add(k);
                shell2 = words.subtract(shell);
                if (shell2.isEmpty()) {
                    //System.out.println(anagram.toString()); it prints off fine here
                                            result.add(anagram); // but doesnt add here

                }
                else 

                    findAnagrams(shell2, anagram, max, smallDict, level + 1, result);
                anagram.remove(anagram.size()-1);
            }
        }
    }
    return results;
}
4

1 回答 1

2

我的猜测是它在这里。

else 
    findAnagrams(shell2, anagram, max, smallDict, level + 1, result);
anagram.remove(anagram.size()-1);  // this is outside of the else case

anagram每次添加元素时都会删除它。你的意思是让它在里面else吗?

else {
    findAnagrams(shell2, anagram, max, smallDict, level + 1, result);
    anagram.remove(anagram.size()-1);
}
于 2012-11-02T22:58:41.250 回答