您的位置:首页 > 编程语言 > Java开发

java解决数字组合问题

2015-07-14 21:28 288 查看
问题描述:输入1~9以内的几个数字,输出这些数字的多重组合。

输入:1,2,3

输出

1

2

3

12

13

23

123

问题分析:

当输入为

1

输出

1

当输入为

1 2

输出

1

2

12

当输入为

1 2 3

输出

1

2

3

12

13

23

123

那么可以分析如下

当输入1 2 3 4时做了以下处理

把上面结果拷贝

1

2

3

12

13

23

123

1

2

3

12

13

23

123

然后在上面的基础上加上4即结果为

1

2

3

12

13

23

123

1

2

3

12

13

23

123

4

然后接着在拷贝的后面部分加上4,结果为

1

2

3

12

13

23

123

14

24

34

124

134

234

1234

4

然后讲以上数字排序输出,就得到了输入为[1 2 3 4] 时的结果。

在这个思路的基础上可以想到用递归的方法来做只需要在上一步的基础之上加上新的数字即可。实现代码如下:

import java.util.ArrayList;
import java.util.Collections;
public class Number {
/*
* 递归函数的输入函数有两个,第一个表示输入数组中第几个数字,第二个表示输入数组
* 由于动态数组可以灵活添加元素,因此使用了动态数组来存储结果
*/
public static ArrayList<Integer> foo(int i,int[]vec){
//递归结束的条件是读到第一个元素之后返回该元素
if(i==0){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(vec[0]);
return list;
}
else{
//得到上一步的结果
ArrayList<Integer> nlist = foo(i-1,vec);
int n = nlist.size();
int num = vec[i];
//把输入数组中此处的元素添加进动态数组
nlist.add(num);
//动态数组中的每一个元素将输入数组中当前元素放在个位之后追加到动态数组
for(int k=0;k<n;k++){
nlist.add(nlist.get(k)*10+num);
}
return nlist;
}

}
public static void main(String[] args) {
int[] vec = {1,2,3};
int l = vec.length;
ArrayList<Integer> list = foo(l-1,vec);
Collections.sort(list);
for(int i:list){
System.out.println(i);
}

}

}
以上是我的解题思路,希望多多指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: