1 把一个数组里的数进行组合全部列出,比如1和2列出来为1,2,12,21
1.1 伪码
- 初始化input,visited,result
- 算法开始,从数组input的不同位置开始,执行下面伪码:
go(input,visited,result,i){
//先对visited进行深拷贝
visited[i]=true;
result.add(input[i]);
打印出result;
for循环,如果visited里面存在fasle项,就go(input,visited,result,false项的地址);
result.remove(result.size() - 1);
}
1.2 代码实现
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
String str = s.nextLine();
String[] temp = str.split("\\s+");
int[] input = new int[temp.length];
for (int i = 0; i < temp.length; ++i) {
input[i] = Integer.valueOf(temp[i]);
}
ArrayList<Integer> result = new ArrayList<Integer>();
boolean[] visited = new boolean[input.length];
for (int i = 0; i < input.length; ++i) {
go(input, visited, result, i);
result.remove(result.size() - 1);
}
};
public static void go(int[] input, boolean[] visited, ArrayList<Integer> result, int i) {
boolean myVisited[] = new boolean[visited.length];
System.arraycopy(visited, 0, myVisited, 0, visited.length);
myVisited[i] = true;
result.add(input[i]);
display(result);