将结果数组定义为类公有变量结果就超时了。
public class Solution {
static ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
public ArrayList<ArrayList<Integer>> permute(int[] num) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
ArrayList<Integer> b = new ArrayList<Integer>();
boolean[] visited = new boolean[num.length];
SeekforthePermutations(num,visited,0,b);
return a;
}
private void SeekforthePermutations(int [] num,boolean[] visited,int level,ArrayList<Integer> b) {
// TODO Auto-generated method stub
if(level==num.length) {
ArrayList<Integer> c=new ArrayList<Integer>();
c.addAll(b);
a.add(c);
return;
}
for (int i = 0; i < num.length; i++) {
if (visited[i] == false) {
if(i!=0&&num[i]==num[i-1]&&visited[i-1]) continue;
visited[i] = true;
b.add(num[i]);
SeekforthePermutations(num, visited, level + 1,b);
b.remove(level);
visited[i] = false;
}
}
}
}
结果是output limit Exceeded.. 没懂。。
- Output Limit Exceeded (OLE) : Your program tried to write too much information. This usually occurs if it goes into a infinite loop.
后来放入方法中ac..
下面为Ac 代码:
public class Solution {
public ArrayList<ArrayList<Integer>> permute(int[] num) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> b = new ArrayList<Integer>();
boolean[] visited = new boolean[num.length];
SeekforthePermutations(num,visited,0,b,a);
return a;
}
private void SeekforthePermutations(int [] num,boolean[] visited,int level,ArrayList<Integer> b,ArrayList<ArrayList<Integer>> a) {
// TODO Auto-generated method stub
if(level==num.length) {
ArrayList<Integer> c=new ArrayList<Integer>();
c.addAll(b);
a.add(c);
return;
}
for (int i = 0; i < num.length; i++) {
if (visited[i] == false) {
if(i!=0&&num[i]==num[i-1]&&visited[i-1]) continue;
visited[i] = true;
b.add(num[i]);
SeekforthePermutations(num, visited, level + 1,b,a);
b.remove(level);
visited[i] = false;
}
}
}
}