2010-03-06 24 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來說,是的,「我在範圍內(...)」循環是醜陋的,並且沒有音調,但是在我頭頂,我不知道任何其他方式來做我在這裏做的事情)