用java语言实现,一个组数:122345这6个数,打印出它所有可能的组合;要求4不能在第3位,3和5不能相连 
算法如下 
public class test0 

  // 当前固定部分 
  private String CurFixPart; 
  private String PreGenNum; 
  
public static void main(String[] args) 

test0 t=new test0(); 
t.GenControll("122345"); 
} // 调整字符串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; 
} protected 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); 
} 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);


谁能解释下这个算法什么意思,希望详细一点,我看了大半天,越看越晕乎,主要解释这个算法是怎样遍历每一种可能的组合的,按照什么样的规律去遍历这些组合,小生有礼了