package com.ams;
import java.util.ArrayList;
import java.util.List;
/**
* @projectName 双色球有多少种
* @description 动态数字列出所有组合可能性每个号码只用一次(递归实现)
* @author Jack Reed
* @createDate 2020-12-17
* @updateRemark 初步实现功能版需要可自行优化
* @version v1.0
*/
public class BichromaticSphere {
/**红色数字组合*/
private static List<String> reds;
/**蓝色数字组合*/
private static List<String> blues;
/**
* 初始化球数字
*/
static{
int redCount = 33;
int blueCount = 16;
reds = new ArrayList<>();
for(int i = 1; i <=redCount; i++){
if(i<10){
reds.add("0"+i);
}else{
reds.add(""+i);
}
}
blues = new ArrayList<>();
for(int i = 1; i <=blueCount; i++){
if(i<10){
blues.add("0"+i);
}else{
blues.add(""+i);
}
}
}
public static void main(String[] args) {
List<String> redNums = getNum(reds, 6);
List<String> numbers = new ArrayList<>();
/**大乐透等篮球为多个的可修改为调用getNum获取所有可能性再进行遍历拼接**/
for (String blueNum : blues) {
for (String redNum : redNums) {
numbers.add(redNum+" "+blueNum);
}
}
System.out.println("共有"+numbers.size()+"种!");
}
/**
* 递归查询所有组合
* @param nums 需要递归查询组合的数组
* @param index 需要几个数字组合
* @return
*/
private static List<String> getNum(List<String> nums, int index){
List<String> retNum = new ArrayList<>();
if(index>1){
for (int i=0; i < nums.size(); i++){
List<String> temp = new ArrayList<>();
for(int y =i+1; y<nums.size(); y++){
temp.add(nums.get(y));
}
List<String> num = getNum(temp, index - 1);
for (String number : num) {
retNum.add(nums.get(i)+" "+number);
}
}
}else{
for (String num : nums) {
retNum.add(num);
}
}
return retNum;
}
}