2010-03-06 32 views
4

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

+11

如果这是家庭作业,那么将它包含在您的标签中会很好。 – 2010-03-06 00:15:15

+0

n开始1还是n开始于0? – 2010-03-06 00:42:37

+0

这个问题在这里至少被问了3次,每次在答案中都有大量的实现。 – Svante 2010-03-06 11:06:13

回答

4

治疗那些字符串作为数字与A=0基座26。这不完全是一个确切的翻译,因为在实际基地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

3

没有放弃太多(因为这个问题似乎是一个家庭作业问题),你正在做的是接近相同的翻译整数n到基地26.祝你好运!

+0

不准确的翻译。 'A'对'AA'对'AAA'等 – polygenelubricants 2010-03-06 00:54:35

+0

@polygenelubricants,它足够接近作业。提供一个完整的解决方案(如你的)对学习者是一种伤害。 – 2010-03-06 02:04:01

+1

它可能或可能不是家庭作业,我们永远无法100%确定。我不想处理元问题,只是尽我全力回答问题。不过,我了解你的观点。 “家庭作业”问题也曾经困扰过我。 – polygenelubricants 2010-03-06 02:10:49

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来说,是的,“我在范围内(...)”循环是丑陋的,并且没有音调,但是在我头顶,我不知道任何其他方式来做我在这里做的事情)