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] 时的结果。
在这个思路的基础上可以想到用递归的方法来做只需要在上一步的基础之上加上新的数字即可。实现代码如下:
输入: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); } } }以上是我的解题思路,希望多多指教。
相关文章推荐
- JavaWeb开发中form、ajax提交数据Model转化
- 【Java】POST简略
- 获得spring容器上下文
- java高新技术上《九》
- java中的println方法打印Date类型数据
- [LeetCode][Java] Pow(x, n)
- Java源码---HashMap的底层实现
- java io流类图
- Eclipse设置:背景与字体大小和xml文件中字体大小调整
- java web如何根据用户使用的浏览器来提示用户更新或更换浏览器
- #笔记#圣思园 JavaWeb 第39讲——Filter过滤器
- JFinal所集成的插件们
- 在线java编辑器
- JAVA线程池的分析和使用
- Eclipse中jsp、js文件编辑时,卡死现象解决汇总
- java字符串常量池知识
- myEclipse8.5下SSH2开发时如何删除antlr-2.7.2包
- [LeetCode][Java] Anagrams
- Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用
- struts2中清空值栈中的值