Возможный вопрос на собеседовании: создание инкрементатора строки псевдокода, аналогичного столбцам Excel - PullRequest
0 голосов
/ 25 мая 2020

Это кажется простым, но я исследовал технические вопросы интервью, и есть один, в частности, на Glassdoor, для которого я еще не нашел решения. Это al oop, которое увеличивает символ на единицу, но после Z он преобразуется в AA, так что по сути становится строкой или сцепленными символами. Подобно тому, как при прокрутке вправо в Excel имена столбцов в алфавитном порядке содержат больше символов.

По сути, он просит построить инкрементатор строки так, чтобы A + 1 = B ... Z + 1 = AA, AA + 1 = AB ... ZZ + 1 = AAA ... и т. Д. .

Хотя я понимаю, что символы увеличиваются на 1 из-за юникода, стоящего за символом, как можно сделать al oop, который неявно создает другой символ, чтобы добавить еще одну букву И увеличить его на единицу, не создавая исходную букву увеличивать, пока последний символ в строке не достигнет Z? Пример: AZ возвращается в BA или BBZ возвращается в BCA.

Я чувствую, что это может быть ограничено, потому что нужно было бы создать для l oop и добавить новый элемент массива для каждого нового символа, который они хотят добавить после того, как l oop достигнет условия (char <'Z' снова?) </p>

Псевдокод приветствуется, но при желании его можно объяснить на конкретном языке.

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Дубликат этого сообщения .

Это сложный вопрос, и я тоже был немного озадачен. Вот решение в Ruby:

def num_to_excel_col(n)
  raise 'Number must be positive' if n < 1
  result = ''
  while true
    if n > 26
      n, r = (n - 1).divmod(26)
      result = (r + 'A'.ord).chr + result
    else
      return (n + 'A'.ord - 1).chr + result
    end
  end
end

# You can substitute 1024 by any positive integer and
# you'll keep getting more results.
(1..1024).each do |i|
  puts num_to_excel_col(i)
end
0 голосов
/ 25 мая 2020

Добро пожаловать в SO!
Одно из решений - рассматривать последнюю строку как число в базе x, где x - количество доступных символов. В немецком алфавите, например, x = 26, так как алфавит
AB C DEFGHIJKLMNOPQRSTUVWX YZ
(без специальных символов).

Затем проблема сводится к увеличению числа i , а затем преобразование i в представление x по основанию.
Обычно x = 10, а представление i = 123 по основанию 10 - «123», потому что 123/10^2 = 1, (123-1*10^2)/10^1 = 2 и (123-1*10^2-2*10^1)/10^0 = 3.
Но в базе 26 i это «4T», потому что 123/26^1 = 4 (обозначено «4») и (123-4*26)/26^0 = 19 (представлено «T»).

...