2014-05-08 41 views
0

我要實現的是這樣的:獲得動態字母順序給出的位置JAVA

A,B,C,...,Z,AA,AB,AC,...,ZZ,AAA, AAB,AAC,... AAZ,ABA,ABB,ABC,... ABZ,..,ZZZ,AAAA,...

我想:

public String getSequence(int pos){  
    StringBuilder sb = new StringBuilder(); 
    int exponential, digit; 
    int totalExponential = range; 
    int maxExp = 0; 
    int tempPos = 0; 

    for(int i=1; tempPos < pos; i++, maxExp++) //loop to find the greatest exponent 
     tempPos += (int)Math.pow(range, i); 
    maxExp--; //greatest exponent is decremented by 1 

    for(int i=1; i<maxExp; i++) 
     totalExponential += (int)Math.pow(range, maxExp); 

    while(maxExp>0){ 
     exponential = (int)(Math.pow(range, maxExp)); 
     pos -= exponential; 
     digit = (pos-1)/totalExponential; 
     sb.append((char)(start+digit)); 
     totalExponential -= exponential; 
     maxExp--; 
    }  
} 

它正常工作,直到位置1378,

enter image description here

但錯誤顯示了下一個位置

enter image description here

有誰有代碼來實現這一點。我更喜歡有遞歸解決方案。謝謝

回答

1

更容易從右到左。

嘗試

public static String getSequence(int pos){ 
    StringBuilder sb = new StringBuilder(); 
    pos = pos -1; 
    while (pos >= 0){ 
     sb.insert(0,(char)(start+(pos % range))); 
     pos /= range; 
     pos = pos -1; 
    } 

    return sb.toString(); 
} 
+0

真棒。謝謝BevynQ。 –