递归实现组合型枚举 JAVA题解

从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。

输入格式

两个整数 n,mn,m ,在同一行用空格隔开。

输出格式

按照从小到大的顺序输出所有方案,每行1个。

首先,同一行内的数升序排列,相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)。

数据范围

n>0n>0 ,
0≤m≤n0≤m≤n ,
n+(n−m)≤25n+(n−m)≤25

输入样例:

5 3

输出样例:

1 2 3 
1 2 4 
1 2 5 
1 3 4 
1 3 5 
1 4 5 
2 3 4 
2 3 5 
2 4 5 
3 4 5 

思路:回溯解决 

import java.util.*;
public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int k = sc.nextInt();
		Listlist = new ArrayList<>();
		dfs(0,n,k,list);
	}
	static void dfs(int idx,int n,int k,Listlist) {
		if(list.size() == k) {
			for(int i = 0;i < k;i ++) {
				System.out.print(list.get(i));
				if(i == k - 1) System.out.println();
				else System.out.print(" ");
			}
			return;
		}
		if(idx >= n) return;
		for(int i = idx;i < n;i ++) {
			list.add(i+1);
			dfs(i+1,n,k,list);
			list.remove(list.size()-1);
		}
	}
}

 

你可能感兴趣的:(递归,回溯,蓝桥杯,回溯)