Постепенное увеличение алфавитов

Создать метод для выполнения конкретной задачи. Если метод увеличивается в размере, это означает, что у него есть некоторые подзадачи, поэтому выделите (реорганизуйте) подзадачи в новый метод.

5
задан Navaneeth K N 29 May 2009 в 06:24
поделиться

5 ответов

Любую рекурсивную функцию можно преобразовать в эквивалентную итеративную. Мне всегда легко сначала подумать рекурсивно:

static string GetColumnName(int index)
{
    const int alphabetsCount = 26;

    if (index > alphabetsCount) {
        return GetColumnName(index / alphabetsCount) + GetColumnName(index % alphabetsCount);
    } else {
        int code = (index - 1) + (int)'A';
        return char.ConvertFromUtf32(code);
    }
}

Что можно просто преобразовать в:

static string GetColumnName(int index)
{
    const int alphabetsCount = 26;
    string result = string.Empty;

    while (index > 0) {
        result = char.ConvertFromUtf32(64 + (index % alphabetsCount)) + result;
        index /= alphabetsCount;
    }

    return result;
}

Тем не менее, послушайте Джоэла.

4
ответ дан 14 December 2019 в 08:59
поделиться

См. Этот вопрос:
Преобразование индекса столбца в имя столбца Excel

или в этот:
Как преобразовать номер столбца (например, 127) в Excel столбец (например, AA)

Хотя первая ссылка имеет правильный ответ прямо вверху, а вторая - несколько неправильных.

4
ответ дан 14 December 2019 в 08:59
поделиться

Рекурсия - одна из возможностей - если index> 26 , вы имеете дело с index% 26 в этом вызове и объединяете его с рекурсивным вызовом на index / 26 . Однако итерация часто бывает более быстрой, и ее несложно организовать для таких простых случаев, как этот. В псевдокоде:

string result = <convert `index % 26`>
while index > 26:
  index = index / 26
  result = <convert `index % 26`> + result
return result

или подобном.

0
ответ дан 14 December 2019 в 08:59
поделиться
static string GetColumnName(int index)
{
    const int alphabetsCount = 26;
    string result = '';

    if (index >= alphabetsCount)
    {
        result += GetColumnName(index-alphabetsCount)
    }
    return (string) (64 + index);
}

Мой C # УЖАСНЫЙ И РЖАВНЫЙ. Интерпретируйте это как псевдокод - он почти наверняка не будет компилироваться, но может помочь вам начать работу.

0
ответ дан 14 December 2019 в 08:59
поделиться

Я не хочу отвечать на вопрос на C #, но я собираюсь показать вам, насколько это просто в Haskell.

alphas :: [String]
alphas = [x ++ [c] | x <- ([]:alphas), c <- ['A'..'Z']]

Prelude> take 100 alphas
["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T",
 "U","V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK",
 "AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ","BA",
 "BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ",
 "BR","BS","BT","BU","BV","BW","BX","BY","BZ","CA","CB","CC","CD","CE","CF","CG",
 "CH","CI","CJ","CK","CL","CM","CN","CO","CP","CQ","CR","CS","CT","CU","CV"]
-1
ответ дан 14 December 2019 в 08:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: