A,B,C,...... Z,AA,AB,......。AZ,BA,BB,.... ,ZZ,AAA,...,编写一个取整数n并返回字符串表示的函数。有人能告诉我算法在系列中找到第n个值吗?
答案 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,但是在我的头脑中,我不知道有什么其他办法去做我在这里做的事情)