Я снова возвращаюсь к другому руководству по общему техническому вопросу на собеседовании. В этом посте я расскажу, как решить проблему Этапы печати. Инструкции для функции Шаги печати следующие:

«Напишите функцию, которая принимает положительное число n. Функция должна консольно записывать фигуру шага с n уровнями с использованием символа #. На ступенях должны быть пустые пространства справа от # для каждого уровня, кроме нижнего, образуя визуальную лестницу ».

 — — Examples
// steps(2)
// '# '
// '##'
// steps(3)
// '#  '
// '## '
// '###'
// steps(4)
// '#   '
// '##  '
// '### '
// '####'

Что делает эту проблему немного более сложной, так это необходимость в пустых пробелах после символов # во всех строках, кроме нижней.

Как показано в приведенном выше примере, steps(3) должен иметь три строки и три столбца. Первая строка будет состоять из одного # и двух пустых пробелов, вторая строка будет состоять из двух символов # и одного пустого места, а третья строка будет состоять из трех символов #. Вы можете представить себе, что каждый полный вывод будет квадратом с n строками и n столбцами.

Эта проблема заставляет нас иметь дело с матрицей или двумерным массивом. Прежде чем мы начнем, давайте взглянем на диаграмму, которая может помочь облегчить понимание этого решения.

На этой диаграмме показано, что будет напечатано на консоли, если steps() вызывается с аргументом 3, и каждая ось на диаграмме представляет собой массив, который нам придется перебирать, чтобы решить эту проблему. Я также включил индексы каждого квадрата в диаграмму, чтобы сделать логику, которую мы будем использовать, немного яснее.

Как видите, символ # присутствует только в квадратах, у которых индекс столбца меньше или равен индексу соответствующей строки. Это важная информация, которую мы будем использовать при разработке решения.

Теперь, когда наша диаграмма настроена, наш следующий шаг (каламбур) - начать построение нашей функции с for loop, который проходит от 0 до n через наш row массив.

В for loop мы объявим новую переменную stair и установим ее равной пустой строке. Эта переменная будет отвечать за содержание каждой строки или шага нашей матрицы. В рамках этого for loop мы установим секунду for loop, на этот раз выполняя итерацию от 0 до n через наш column массив.

Внутри этого второго for loop мы разместим нашу логику, которая определяет, добавляется ли # или “ “ к stair. Возвращаясь к диаграмме, мы знаем, что если текущий индекс столбца меньше или равен текущему индексу строки, то к stair необходимо добавить #. В противном случае необходимо добавить пустую строку.

Условное выражение будет проверять каждый столбец текущей строки и заполнять переменную stair # или пустой строкой соответственно. После итерации каждого столбца во всей строке мы выходим из второго for loop и печатаем stair с console.log, чтобы отобразить «шаг» текущей строки.

После печати stair цикл начнет итерацию по следующему индексу row и сбросит значение stair. Этот процесс будет продолжаться до тех пор, пока все строки не будут повторены.

Очень важно убедиться, что вы печатаете stair перед выходом первого for loop, иначе stair будет вне области действия и undefined.

Вывод

Функция Действия по печати - один из самых сложных вопросов, с которыми вы можете столкнуться во время технического собеседования. Я предлагаю вам начать с написания псевдокода или создания диаграммы для визуализации конечного результата функции. Начало с этих процессов может помочь вам определить логику, необходимую для решения проблемы, а также наглядно продемонстрировать ваш мыслительный процесс интервьюеру.