获得位置JAVA的动态字母序列

时间:2014-05-08 03:15:51

标签: java sequence alphabetical

我想实现这样的目标:

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 个答案:

答案 0 :(得分: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();
}