刷题时候发现提交代码时候总是会出错,但是自己在本地测试的时候答案是正确的。研究了很久发现是因为set设置为static并且初始化。由于在本地每次都只测试一个示例,并不是一次连续测试多个示例所以测试不出错误来。但是程序自动化测试的时候,多个示例共同使用一个set,导致前一个示例的运行结果还存在set中进而导致后续的示例会出错。解决方案:
- 将set的初始化放在方法内
- 去掉set前的static
错误代码:
class Solution {
char[] seqs;
static HashSet<String> set = new HashSet<>();
Integer[] flag;
public ArrayList<String> Permutation(String str) {
ArrayList<String> result = new ArrayList<>();
if (str == null || str.isEmpty()) {
return result;
}
char[] strs = str.toCharArray();
seqs = new char[strs.length];
flag = new Integer[strs.length];
for (int i = 0; i < flag.length; i++) {
flag[i] = 0;
}
f(0, str.toCharArray());
result.addAll(set);
Collections.sort(result);
return result;
}
public void f(int n, char[] chars) {
if (n == chars.length) {
String str = "";
for (int i = 0; i < chars.length; i++) {
str += seqs[i];
}
set.add(str);
return;
}
for (int i = 0; i < chars.length; i++) {
if (flag[i] == 0) {
seqs[n] = chars[i];
flag[i] = 1;
f(n + 1, chars);
flag[i] = 0;
}
}
}
}