1、2、2、3、4、5六个数字,请打印出所有6位的排列,要求:4不能在第三个,3和5不能相邻!

package ceshi;

public class Test3 {
    // 当前固定部分
    private String CurFixPart;

    private String PreGenNum;

    public static void main(String[] args) {
        Test3 t = new Test3();
        t.GenControll("123456");
    }

    // 调整字符串s位置pos字符到最前
    private String shift(String s, int pos) {
        String newStr;
        if (s.length() > pos + 1)
            newStr = s.substring(pos, pos + 1) + s.substring(0, pos)
                    + s.substring(pos + 1);
        else
            newStr = s.substring(pos) + s.substring(0, pos);
        return newStr;
    }

    private int Validate(String newNum) {
        String newGenNum = CurFixPart + newNum;
        if (Integer.valueOf(newGenNum) <= Integer.valueOf(PreGenNum))
            return 0;
        if (newGenNum.substring(2, 3).equals("4")
                || (newGenNum.indexOf("35") != -1)
                || (newGenNum.indexOf("53") != -1))
            return 0;

        PreGenNum = newGenNum;
        System.out.println("----"+newGenNum);
      
        return 0;
    }

 public void GenControll(String Base) {
        PreGenNum = "0";
        CurFixPart = "";
        GenNext(Base, 0);
    }

    public void GenNext(String varPart, int curPos) {
        if (varPart.length() == 2) {
            Validate(varPart);
            Validate(shift(varPart, 1));
            return;
        }
        // Next Layer
        String newGen = shift(varPart, curPos);
        String SavedFixPart = CurFixPart;
        CurFixPart = CurFixPart + newGen.substring(0, 1);
        GenNext(newGen.substring(1), 0);
        CurFixPart = SavedFixPart;
        // 同层递增
        if (curPos == varPart.length() - 1)
            return;
        GenNext(varPart, curPos + 1);
        
    }
}

你可能感兴趣的:(打印)