帮你写下吧,题目不难,重在理解
主要理解我代码里的41行,这行理解了基本上就没问题了



完整代码
package day0611;
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
static int count = 0;
public static void main(String[] args) {
//控制台输入过程自己写
int n = 4, m = 2;
System.out.println("输出------");
comb(n,m);
System.out.println("总数:"+count);
}
//从1-n中选出m个数
static void comb(int n,int m) {
List<Integer> line = new ArrayList<Integer>();
combnext(line,n,m);
}
//对于每一个行再添加一个
static void combnext(List<Integer> line,int n,int m) {
int sta = 0;
if(line.size() != 0) {//去line中已存在的最大数
sta = line.get(line.size()-1);
}
//最大数与n间的差距,则为都可以添加的值
//比如最大数为2,n为5,那么下一个可添加的数可以是3,4,5
for(int i=sta+1;i<=n;i++) {
line.add(i);//line 增加一个数后
if(line.size() == m) {//已经满足条件
printLine(line);
count++;
}else {//不满足继续添加
//调用自身进行迭代
combnext(line,n,m);
}
//最关键的一步 移除最后添加的一个进行回溯
line.remove(line.size()-1);
}
}
static void printLine(List<Integer> line) {
for(int i:line) {
System.out.print(i+" ");
}
System.out.println("");
}
}