java练习:打印 数字1、2、3、4的组合,不能以4开头,1和3不能相邻,且数字不能重复

来源:互联网 发布:美津浓和亚瑟士 知乎 编辑:程序博客网 时间:2024/05/22 02:48
public class Test6 {        /**         * 用1、2、3、4这四个数字,用java写一个main函数,打印出所有不同的排列,如:1234、1243等,         * 要求:"4"不能在第一位,"1"与"3"不能相连。         */        public static void main(String[] args) {                // TODO Auto-generated method stub                //正则表达式,代表不以4开头的字符串                String regex1 = "^[^4].*$";                                //代表1和3相连的字符串                String regex2 = ".*[1][3].*$";                String regex3 = ".*[3][1].*$";                //建立存储组合的字符                StringBuilder sb = new StringBuilder("");                String str = null;                int count = 0;//统计个数                                for(int i = 1;i < 5;i++){                        for (int j = 1        ; j < 5; j++) {                                for(int k = 1; k < 5 ; k++){                                        for(int h = 1 ; h < 5 ; h++){                                                sb.append(i).append(j).append(k).append(h);                                                str = sb.toString();                                                if(str.matches(regex1))//不以4开头                                                {                                                        if(!(str.matches(regex2)||str.matches(regex3))){//1和3不相连                                                                if(single(str)){ //过滤,只要数字不重复的组合                                                                        count++;                                                                        System.out.println(str+"..."+count);                                                                }                                                        }                                                }                                                                                sb.delete(0,sb.length());                                        }                                }                                                        }                }                        }        private static boolean single(String str) {  //去除相同数字                // TODO Auto-generated method stub                boolean flag = true;                for(int i = 1;i < 5;i++){                        int count = 0;                        int offset = 0;                        while((offset = str.indexOf(String.valueOf(i),offset))!=-1){                                offset += 1;                                count++;                                if(count > 1){                                        flag = false;                                        break;                                }                        }                }                return flag;        }}
运行结果
1234...11243...21423...31432...42143...52341...63214...73241...83412...93421...10

0 0