下面的代码是网上找的,我按照自己的理解加的注释:
public class test01 {
public static void main(String[] args) {
// 理论上,题目所要求的排列组成的数字,都包含在122345~543221之间,所以外层循环控制数值遍历
for(int i=122345;i<=543221;i++){
// 将数字i转换成char类型的数组s,例如当i=122345时,s[]={'1','2','2','3','4','5'}
char s[]=new Integer(i).toString().toCharArray();
// 声明变量s1,s2,s3,s4,s5,flag作为判断依据,并设置初始值
int s1=0;
int s2=0;
int s3=0;
int s4=0;
int s5=0;
boolean flag=true;
// 声明变量j作为数组s中的元素的下标(index)
for(int j=0;j<s.length;j++){
// 判断数组s中的元素是否包含在{'1','2','3','4','5'}中,是则对应的s1,s2,s3,s4,s5加1
// 其中s1代表元素'1'在当前数组s中出现的次数,s2,s3,s4,s5同理
if(s[j]=='1'){s1++;}
if(s[j]=='2'){s2++;}
if(s[j]=='3'){s3++;}
if(s[j]=='4'){s4++;}
if(s[j]=='5'){s5++;}
// 判断'3'与'5'是否相连,是则不符合题目要求,flag返回false
if(j!=s.length-1){
if(s[j]=='3'&&s[j+1]=='5'||s[j]=='5'&&s[j+1]=='3'){flag=false;}
}
}
// 判断数组s中第三位的元素是否为'4',是则不符合题目要求,flag返回false
if(s[2]=='4'){
flag=false;
}
// 判断当前数值i是否符合题目所要求的排列,是则输出i
if(s1==1&&s2==2&&s3==1&&s4==1&&s5==1&&flag){
System.out.println(i);
}
}
}