系列算法

时间:2010-03-06 00:14:39

标签: algorithm

A,B,C,...... Z,AA,AB,......。AZ,BA,BB,.... ,ZZ,AAA,...,编写一个取整数n并返回字符串表示的函数。有人能告诉我算法在系列中找到第n个值吗?

3 个答案:

答案 0 :(得分:4)

将这些字符串视为基数为26的数字A=0。这不是一个确切的翻译,因为在实际基础26 A=AA=AAA=0,所以你必须根据需要做一些调整。

这是一个Java实现:

static String convert(int n) {
    int digits = 1;
    for (int j = 26; j <= n; j *= 26) {
        digits++;
        n -= j;
    }
    String s = "";
    for (; digits --> 0 ;) {
        s = (char) ('A' + (n % 26)) + s;
        n /= 26;
    }
    return s;
}

根据需要转换0=A, 26=AA, 702=AAA

答案 1 :(得分:3)

没有太多放弃(因为这个问题似乎是一个家庭作业问题),你所做的与将整数n翻译成基数26的情况差不多。祝你好运!

答案 2 :(得分:0)

如果像其他人怀疑的那样,这是家庭作业,那么这个答案可能不会有多大帮助。如果这是一个真实世界的项目,那么做一个生成器可能是有意义的,这在一些语言中是很容易和惯用的事情,比如Python。像这样:

def letterPattern():
    pattern = [0]
    while True:
        yield pattern
        pattern[0] += 1

        # iterate through all numbers in the list *except* the last one
        for i in range(0,len(pattern)-1):
            if pattern[i] == 26:
                pattern[i] = 0
                pattern[i+1] += 1

        # now if the last number is 26, set it to zero, and append another zero to the end
        if pattern[-1] == 26:
            pattern[-1] = 0
            pattern.append(0)

除了代替pattern本身,你会反转它,并将0映射到A,1映射到B等,然后产生字符串。我已经运行了上面的代码,它似乎工作,但我还没有广泛测试它。

我希望你会发现这个可读性足以实现,即使你不懂Python。 (对于那里的Pythonistas,是的,“for i in range(...)”循环是丑陋和unpythonic,但是在我的头脑中,我不知道有什么其他办法去做我在这里做的事情)