Эта следующая серия проблем кода все связано с аранжировкой элементов в матричной шаблоне и распечатывает результаты. Каждый может быть решен несколькими способами, используя итерацию или рекурсию. Мы начнем с моделей лестницы в этом посте, но оставайтесь на улице для других на будущих постах. Давайте прыгнем!
1. Создание лестницы
В вариациях этой проблемы вас просят распечатать форму лестницы с N уровни. Например, вы можете проверить Проблема лестницы на HackeRrank Отказ Некоторые вызовы могут попросить вас распечатать шаги, стоящие вправо, влево или даже с ног на голову, но аналогичная стратегия может использоваться для каждой вариации. Именно этот пример нам дают ряд уровней, и просят распечатать лестницу с N уровни, восходящие слева направо, вроде это:
staircase(4) // Result: # ## ### ####
Возможные стратегии
Первый ключ для решения этой проблемы через любую из стратегий включает в себя визуализацию пример лестницы и разрушения его в матрицу пространств и символов, как так:
| # | Col 0. | |||
| # | # | Col 1. | ||
| # | # | # | Col 2. | |
| # | # | # | # | Col 3. |
Если бы у нас было бы 4 строк и 4 столбца. Было бы 4 символа в нижней строке, а нулевые пространства. Видя строки и колонны визуально могут помочь нам спуститься к кодированию.
Стратегия повторения строки
Наиболее краткое решение этой проблемы используют один цикл для перебрызгивания через строки и создать строку с использованием метода повторения.
function staircase(n) {
for (i=0; iХотя это может работать с более легкими вариациями проблемой лестницы, она, вероятно, сломалась с более сложными проблемами, поэтому важно знать итерацию и стратегии рекурсионных стратегию ниже.
Стратегия итерации
Поскольку размещение символов зависит от местоположения на основе рядов и столбцов, мы можем использовать итерацию через строки и столбцы, чтобы начать наше решение. Мы распечатаем каждую строку к консоли на основе строк, но организуем символы в каждой строке, обратившись к столбцам. Следовательно, мы можем начать псевдокодирование нашего решения, как это:
// function staircase(n) {
// iterate through rows {
// set up empty string for the given row
// iterate through columns {
// if the column number is less than or equal to the row
// add # to the end of the string
// otherwise
// add an empty space to the beginning of the string
// }
// console.log the string for the row
// }
// }
Далее мы можем записать его под нашими примечаниями:
function staircase(n) {
// iterate through rows
for (let row = 0; rowПолный код без комментариев:
function staircase(n) {
for (let row = 0; row //
#
##
###
####
Стратегия рекурсии
В этой стратегии мы все равно будем использовать диаграмму матрицы, чтобы помочь нам визуализировать строки и столбцы, которые составляют лестницу.
| # | Col 0. | |||
| # | # | Col 1. | ||
| # | # | # | Col 2. | |
| # | # | # | # | Col 3. |
Однако вместо того, чтобы итерацию через строки и столбцы мы позвоним в функцию лестницы для каждой строки и построим строку для представления каждой строки на основе количества столбцов в матрице.
В псевдокоде вот что нам нужно будет делать:
// set default values for arguments that will be needed in each function call (row number, and string)
// set up a base case so that the recursive function calls will stop (when n reaches zero)
// set up a conditional to account for the cases when the string length for a row is full (n===string.length)
// print out the row (string)
// call the function to start work on the next row (row + 1)
// account for adding characters to the string if the row is not yet full (n < string.length), based on comparing the string length with the row number
// call the function to continue working on the row, with the current row and updated string passed as arguments
В коде мы в конечном итоге с:
function staircase(n, row=0, string="") {
if (n===row) {
return
}
if (n===string.length) {
console.log(string)
return staircase(n, row+1)
}
const add = string.length <= row ? "#" : " "
staircase(n, row, add + string)
}
Применение стратегий к другим вариациям
Чтобы решить подобные вызовы лестниц с несколькими разными вариациями, вы, вероятно, просто должны будут изменить небольшие детали в вашем коде. Вытяните ожидаемый выход на строки и столбцы и задайте себе эти вопросы:
- Какую линию/строки мне нужно будет изменить, чтобы перевернуть направление шагов (влево или вправо, или верх или внизу)?
- Какую линию/строки мне нужно для изменения числа, договоренности или шаблонов символов и пробелов в каждой строке?
Используя аналогичные стратегии, вы должны быть в состоянии выяснить вызовы пирамиды, такие как этот:
Напишите функцию, которая возьмет в один параметр, высоту пирамиды и распечатает форму пирамиды с этим многими уровнями.
Например, Пирамида (4) приведет к выводу:
x xxx xxxxx xxxxxxx
Вы видели другие вариации по лестнице или пирамидальные проблемы? Поделитесь их ниже!
Оригинал: “https://dev.to/jessesbyers/staircase-challenges-repeat-iteration-and-recursion-strategies-2f67”