标题:猜密码 | 时间限制:1秒 | 内存限制:32768K | 语言限制: 不限 【猜密码】 小杨申请了一个保密柜,但是他忘记了密码。只记得密码都是数字,而且所有数字都是不重复的。请你根据他记住的数字范围和密码的最小数字数量,帮他算下有哪 些可能的组合,规则如下: 1、输出的组合都是从可选的数字范围中选取的,且不能重复; 2、输出的密码数字要按照从小到大的顺序排列,密码组合需要按照字母顺序,从小到大的顺序排序。 3、输出的每一个组合的数字的数量要大于等于密码最小数字数量; 4、如果可能的组合为空,则返回“None” 输入描述:
1、输入的第一行是可能的密码数字列表,数字间以半角逗号分隔
2、输入的第二行是密码最小数字数量
输出描述:
可能的密码组合,每种组合显示成一行,每个组合内部的数字以半角逗号分隔,从小到大的顺序排列。 输出的组合间需要按照字典序排序。
比如: 2,3,4放到2,4的前面
public static void main(String[] args){//猜密码int input[]={2,3,4,5,6,7,8,9,10};int ken =2;List<Integer> list = new LinkedList<>();//数组存入listint a[]=new int[input.length];Arrays.sort(input);for(int i=0;i<input.length;i++){((LinkedList<Integer>) list).addLast(input[i]);}List<Integer> res = new LinkedList<>();if(ken>input.length)System.out.print("None");else {dfs(list, res, 0, 2);}}
public static void dfs(List<Integer>list,List<Integer>res,int i,int ken){if(res.size()>=ken){for(int a:res){if(a!=res.get(res.size()-1)){System.out.print(a+",");}else {System.out.println(a);}}}for(;i<list.size();i++){if(res.size()==0||list.get(i)>res.get(res.size()-1)){//找出所有可能组合res.add(list.get(i));dfs(list, res,i, ken);res.remove(res.size()-1);}}}