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

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...1
1243...2
1423...3
1432...4
2143...5
2341...6
3214...7
3241...8
3412...9
3421...10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值