Алгоритм для серии - PullRequest
       3

Алгоритм для серии

4 голосов
/ 06 марта 2010

A, B, C,…. Z, AA, AB,… .AZ, BA, BB,…. , ZZ, AAA,…., Напишите функцию, которая принимает целое число n и возвращает представление строки. Может кто-нибудь сказать мне алгоритм, чтобы найти n-е значение в серии?

Ответы [ 3 ]

4 голосов
/ 06 марта 2010

Обрабатывайте эти строки как числа в базе 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по мере необходимости.

3 голосов
/ 06 марта 2010

Не отдавая слишком много (поскольку этот вопрос, похоже, является проблемой домашней работы), то, что вы делаете, похоже на преобразование целого числа n в базу 26. Удачи!

0 голосов
/ 06 марта 2010

Если, как другие подозревают, это домашняя работа, то этот ответ, вероятно, не сильно поможет. Однако, если это для реального проекта, возможно, имеет смысл вместо этого создать генератор, что легко и идиоматично сделать в некоторых языках, таких как 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 (...)» уродлив и непитоничен, но, черт побери, я не знаю другого способа сделать то, что я делаю здесь )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...