<p>package com.isoftstone.tsl.monitor;<br/><br/>import java.util.ArrayList;<br/>import java.util.Arrays;<br/>import java.util.HashMap;<br/>import java.util.Iterator;<br/>import java.util.Map;<br/><br/><br/>public class Pop {<br/><br/> private ArrayList<Element> srcList = new ArrayList<>();<br/> <br/> private Map<String, Element[]> resultSet = new HashMap<String, Element[]>();<br/> <br/> /<br/> * 递归次数<br/> */<br/> private int loopTimes = 8;<br/> <br/> /<br/> * 目标值<br/> */<br/> private int targetNum = 0;<br/> <br/> <br/> public int getLoopTimes() {<br/> return loopTimes;<br/> }<br/><br/> public void setLoopTimes(int loopTimes) {<br/> this.loopTimes = loopTimes;<br/> }<br/><br/> public int getTargetNum() {<br/> return targetNum;<br/> }<br/><br/> public void setTargetNum(int targetNum) {<br/> this.targetNum = targetNum;<br/> }<br/> <br/> <br/><br/> public ArrayList<Element> getSrcList() {<br/> return srcList;<br/> }<br/><br/> public void setSrcList(ArrayList<Element> srcList) {<br/> this.srcList = srcList;<br/> }<br/><br/><br/><br/> public class Element implements Comparable<Object> {<br/> private int id;<br/> <br/> private int value;<br/><br/> public Element(int id, int value){<br/> this.id = id;<br/> this.value = value;<br/> }<br/> public int getId() {<br/> return id;<br/> }<br/><br/> public void setId(int id) {<br/> this.id = id;<br/> }<br/><br/> public int getValue() {<br/> return value;<br/> }<br/><br/> public void setValue(int value) {<br/> this.value = value;<br/> }<br/> <br/> @Override<br/> public int compareTo(Object o) {<br/> if (o instanceof Element) {<br/> Element element = (Element) o;<br/> if (this.value > element.value) {<br/> return 1;<br/> } else if (this.value == element.value) {<br/> return 0;<br/> } else {<br/> return -1;<br/> }<br/> }<br/> return 0;<br/> }<br/> <br/> <br/> }<br/> <br/> public Pop(int[] numbers){<br/> for (int i = 0; i < numbers.length; i++) {<br/> Element element = new Element(i, numbers[i]);<br/> srcList.add(element);<br/> }<br/> }<br/> <br/> <br/> public void printIfIsRight(Element[] targetList){<br/> if (targetList == null || targetList.length == 0) {<br/> return ;<br/> }<br/> int totoal = 0;<br/> for (int i = 0; i < targetList.length; i++) {<br/> if(targetList[i] != null)<br/> totoal+= targetList[i].getValue();<br/> }<br/> if (totoal == targetNum) {<br/> System.out.println("===================find=================");<br/> Element[] tempList = new Element[targetList.length];<br/> for (int i = 0; i < tempList.length; i++) {<br/> tempList[i] = targetList[i];<br/> }<br/> Arrays.sort(tempList);<br/> String key = "";<br/> for (int i = 0; i < tempList.length; i++) {<br/> System.out.println("id = "+tempList[i].getId());<br/> key = key +tempList[i].getId()+"-";<br/> System.out.println(""+tempList[i].getValue());<br/> <br/> }<br/> resultSet.put(key, tempList);<br/> System.out.println("=======================================");<br/> <br/> <br/> }<br/> <br/> <br/> }<br/> <br/> public void printResult() {<br/> <br/> for (Iterator<String> iterator = resultSet.keySet().iterator(); iterator.hasNext();) {<br/> String key = (String) iterator.next();<br/> Element[] elements = resultSet.get(key);<br/> System.out.println("===================find=================");<br/> System.out.println("ids="+key);<br/> for (int i = 0; i < elements.length; i++) {<br/> System.out.println("id="+elements[i].getId());<br/> <br/> System.out.println("value="+elements[i].getValue());<br/> <br/> }<br/> System.out.println("=======================================");<br/> }<br/> }<br/> <br/> public ArrayList<Element> popOne(ArrayList<Element> srcList , Element element){<br/> ArrayList<Element> newList = new ArrayList<>();<br/> for (int i = 0; i < srcList.size(); i++) {<br/> Element e = srcList.get(i);<br/> if (element.getValue() != e.getValue()) {<br/> newList.add(e);<br/> }<br/> }<br/> return newList;<br/> <br/> }<br/> <br/> public void findByLoop(ArrayList<Element> srcList, Element[] targetList, int loopOffset) {<br/> <br/> <br/> for (int i = 0; i < srcList.size(); i++) {<br/> <br/> Element element = srcList.get(i);<br/> <br/> targetList[loopOffset] = element;<br/> <br/> for (int j = loopOffset+1; j < targetList.length; j++) {<br/> 后面的清空<br/> targetList[j] = null;<br/> }<br/> <br/> <br/> <br/> if (loopOffset < this.loopTimes - 1) {<br/> <br/> int nextLoopOffset = loopOffset+1;<br/> <br/> findByLoop(popOne(srcList, element), targetList, nextLoopOffset);<br/> <br/> <br/> } <br/> <br/> if (loopOffset == this.loopTimes-1) {<br/> printIfIsRight(targetList);<br/> }<br/> <br/> }<br/> <br/> <br/> <br/> <br/> }<br/><br/> public static void main(String[] args) {<br/> <br/> int num = 9;<br/> Element[] targetList = new Element[num];<br/> int[] numbers = {343420,349488,388100,398168,425090,429256,510636,518340,553603,574291,609070,614425,<br/> 616740,639664,686264,708628,713200,722258,772328,840200,840880,905098,945724,1195817,1248000,<br/> 1308202,2019308,41280,16850,80000,158300,11000,237956,30000,477120,193730,10200,11100,12250,12500,<br/> 20000,20800,22096,22500,25000,26790,29030,29512,29520,31400,31850,33760,35100,35816,41600,53756,<br/> 55900,66400,78160,86900,97536,97540,99800,104300,124800,135024,154080,156952,157788,196378,206746,<br/> 211180,221406,231692,238302,253420,292428,310550,317160,346360,366850,398650,401150,445058,1530790,<br/> 1712261,351993,238258};<br/> <br/> Pop pop = new Pop(numbers);<br/> pop.setTargetNum(3697636);<br/> pop.setLoopTimes(num);<br/> <br/> pop.findByLoop(pop.getSrcList(), targetList, 0);<br/> <br/> pop.printResult();<br/> System.out.print("end");<br/> }<br/><br/>}<br/><br/></p>