特殊时间 时间写成 4 位后由 3 个一种数字和 1 个另一种数字组成。

2022 年 2 月 22 日 22:20 是一个很有意义的时间,年份为 2022,由 3 个 2
和 1 个 0 组成,如果将月和日写成 4 位,为 0222,也是由 3 个 2 和 1 个 0 组
成,如果将时间中的时和分写成 4 位,还是由 3 个 2 和 1 个 0 组成。
小蓝对这样的时间很感兴趣,他还找到了其它类似的例子,比如 111 年 10
月 11 日 01:11,2202 年 2 月 22 日 22:02 等等。
请问,总共有多少个时间是这种年份写成 4 位、月日写成 4 位、时间写成
4 位后由 3 个一种数字和 1 个另一种数字组成。注意 1111 年 11 月 11 日 11:11
不算,因为它里面没有两种数字。



import java.util.ArrayList;
import java.util.List;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;

public class riqi{
    public static void main(String[] args) {
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        //严格计算日期
        sdf.setLenient(false);
        List<String> resultList=new ArrayList<>();
        //先看看 两个不同的数字有多少种组合
        for(int i=0;i<10;i++){
            //0001 0010 0100 1000
            //1110 1101 1011 0111
            for(int j=i+1;j<10;j++){
                int zong=0;
                List<String> list=new ArrayList<>();
                list.add(i+""+i+""+i+""+j);
                list.add(i+""+i+""+j+""+i);
                list.add(i+""+j+""+i+""+i);
                list.add(j+""+i+""+i+""+i);
            
                for(int m=0;m<list.size();m++){
                    int value=Integer.valueOf(list.get(m));
                    for(int n=0;n<list.size();n++){
                        for(int p=0;p<list.size();p++){
                            String date=list.get(m)+list.get(n)+list.get(p);
                            try {
                                sdf.parse(date);
                            } catch (ParseException e) {
                                continue;
                            }
                            zong++;
                            resultList.add(date);
                        }
                    }
                }

                list=new ArrayList<>();
                list.add(j+""+j+""+j+""+i);
                list.add(j+""+j+""+i+""+j);
                list.add(j+""+i+""+j+""+j);
                list.add(i+""+j+""+j+""+j);
                for(int m=0;m<list.size();m++){
                    int value=Integer.valueOf(list.get(m));
                    for(int n=0;n<list.size();n++){
                        for(int p=0;p<list.size();p++){
                            String date=list.get(m)+list.get(n)+list.get(p);
                            try {
                                sdf.parse(date);
                            } catch (ParseException e) {
                                continue;
                            }
                            zong++;
                            resultList.add(date);
                        }
                    }
                }
                if(zong>0)
                    System.out.println(i+"+"+j+"的结果共有"+zong+"种");
            }
        }
        System.out.println(resultList.size());
    }
    
}

4月9号好家伙,同行啊我答案是三百多,三百几十一忘了,也是想来看看有没有代码的

手算答案:
88

就循环查找呗:

1、保证年月日里面只出现了2个数字;
2、保证年、月日、时分里面都只包含3个一样的数字

打印出来就OK了。
另外你这个题目本身就有问题,没有写明起始时间和结束时间。