给你递归{:3_47:}
- import java.util.ArrayList;
- import java.util.Collections;
- //有六个数 0,1,2,3,4,5 取其中的任意三个数组成一个能被5整除的数,如120,125,135,130,并把所有符合条件的三位数打印出来
- class Test
- {
- static ArrayList<String> myList = new ArrayList<String>();
- public static void main(String[] args)
- {
- ArrayList<String> src = new ArrayList<String>();//初始化src
- src.add("0");
- src.add("1");
- src.add("2");
- src.add("3");
- src.add("4");
- src.add("5");
- System.out.println("所有3位数:");
- addNum(src,new ArrayList<String>(),3);//主方法: 结果是把全排列数据加入到myList
- printList(myList);//打印myList
- //最后一步不封装方法了
- System.out.println("最终结果:");
- for(String s : myList)
- {
- int i = Integer.parseInt(s);
- if(i>99&&i%5==0)//三位数 除5不余
- System.out.print(s+" ");
- }
- }
- //此方法返回位数为numCount的所有数字组合
- public static void addNum(ArrayList<String> src,ArrayList<String> dest,int numCount)
- {
- ArrayList<String> tempsrc = new ArrayList<String>(src.subList(0, src.size()));//初始化临时src集合
- tempsrc.removeAll(dest);//扣除已经被移到目标集合中的元素
- for(int i =0;i<tempsrc.size();i++)
- {
- ArrayList<String> temp = new ArrayList<String>(dest.subList(0, dest.size()));//初始化临时desc集合
- temp.add(tempsrc.get(i));//移动一个元素
- if(temp.size()==numCount)
- {
- putIntoList(temp);//收集全排列集合
- }
- if(temp.size()<numCount)//控制需要获得数字的位数
- addNum(src,temp,numCount);//递归 每次进入方法数字位数加1
- }
- }
- public static void putIntoList(ArrayList<String> list)
- {
- StringBuilder sb = new StringBuilder();
- for(String t : list)
- sb.append(t);
- myList.add(sb.toString());
- }
- public static void printList(ArrayList<String> list)
- {
- for(String str : list)
- System.out.print(str+" ");
- System.out.println();
- }
- }
复制代码 |