62,623
社区成员
发帖
与我相关
我的任务
分享import java.util.LinkedList;
/**
* 100以内所有可以加为100的整数的组合。<br>
* 此处以10为例子。<br>
* 思路是,拿到第一个数,然后把后面的递归解析,<br>
* 原则后面的数不能小于当前这个数<br>
* 且不大于结果减去当前数.<br>
* <br>
* 比如 10,技术从0开始,则当前数为1,被递归解析数为9<br>
* 递归的起点为1,保证1不会再被解析。
*
* @author jayflee,老紫竹 java2000.net
*
*/
public class T {
public static void main(String[] args) {
split(10, 0);
}
static LinkedList<Integer> list = new LinkedList<Integer>();
public static void split(int n, int base) {
if (n == 0) {
System.out.println(list);
return;
}
for (int i = base + 1; i <= n; i++) {
list.addLast(i);
split(n - i, i);
list.removeLast(); //这行看不懂,为什么要删除最后一个元素?
}
}
} 
public static void main(String[] args) {
split(11, 0);
}
static Stack<Integer> list = new Stack<Integer>();
public static void split(int n, int base) {
if (n == 0) {
System.out.println(list);
return;
}
for (int i = base + 1; i <= n; i++) {
list.push(i);
split(n - i, i);
list.pop();
}
}