所以我有这个功课(我不是想作弊)而且我在课堂论坛上提出了这个问题,但我很难理解教授所写的伪代码......它怎么可能有效。
目标是获取字符串列表和“r”,“w”,“b”...... 然后将它们重新排序为6个新字符串......
这是我根据他的伪代码编写的java:
public class Solution2 {
public static ArrayList<String> solve(ArrayList<String> base) {
ArrayList<String> temp = new ArrayList<String>();
ArrayList<String> result = new ArrayList<String>();
// Check for the empty set
if (base == null) {
ArrayList<String> empty = new ArrayList<String>();
return empty;
}
char first = 'y';
String firstString = "";
for (Iterator<String> i = base.iterator(); i.hasNext();) {
if (first == 'y') {
firstString = i.next();
base.remove(0);
first = 'n';
}
temp = solve(base);
for (Iterator<String> n = temp.iterator(); n.hasNext();) {
// Add first string
result.add(firstString + n.next());
}
return result;
//
}
return result;
}
}
我只是不知道你如何继续积累主要的字符串列表。我得到一个空集......这是基本情况。
答案 0 :(得分:0)
我认为在你试图理解教授的代码之前,你应该备份并考虑一个更简单的案例,这样你才能知道要寻找什么。
您的递归函数需要一个步骤,它返回一个列表,其中添加了新元素以及下一个递归调用的结果。
假设我们有一个函数,我们返回一个由列表的单独字符组成的列表:
public static void main(String[] args) {
System.out.println("result of '' =" + listChars(""));
System.out.println("result of 'a'=" + listChars("a"));
System.out.println("result of 'abcd'=" + listChars("abcd"));
}
测试工具看起来像
result of '' =[]
result of 'a'=[a]
result of 'abcd'=[a, b, c, d]
打印
{{1}}
你的函数没有这样的情况,你将当前迭代的结果加上下次递归调用的结果添加到你要返回的列表中。