Вопрос заключается в следующем:
Строка "PAYPALISHIRING" написана зигзагообразным шаблоном на заданном количестве строк, например: (вы можете захотеть отобразить этот шаблон фиксированным шрифтом для лучшей читаемости )
P A H N
A P L S I I G
Y I R
И затем читать построчно: "PAHNAPLSIIGYIR"
Напишите код, который будет принимать строку, и выполните это преобразование с учетом числа строк:
преобразование строки (строка s, int numRows); Пример 1:
Вход: s = "PAYPALISHIRING", numRows = 3 Выход: "PAHNAPLSIIGYIR" Пример 2:
Вход: s = "PAYPALISHIRING", numRows = 4 Выход: "PINALSIGYAHRPI" Объяснение:
P I N
A L S I G
Y A H R
P I
Я написал следующий код, но я застрял с точки зрения того, как пометить строку как один раз для перемещения вниз, где я увеличиваю начальную строку, но когда она зигзагообразна назад наверх, это должно быть уменьшено. Я не могу понять логи c, чтобы сделать эту работу, не влияя на движение вниз. Любая помощь будет оценена.
const convert = (s, numRows) => {
let startRow = 0
let endRow = numRows - 1
let startColumn = 0
let endColumn = Math.floor((s.length / 2) - 1)
s = s.split('')
let results = []
// to setup the columns
for (let i = 0; i < numRows; i++) {
results.push([])
}
while (startRow <= endRow && startColumn <= endColumn && s.length) {
for (let i = startRow; i <= endRow; i++) {
results[i][startColumn] = s.shift()
}
for (let i = endRow - 1; i >= startRow; i--) {
results[i][startColumn + 1] = s.shift()
startColumn++
}
//this line seems to be the issue
startRow++
}
return results
}
console.log(convert('PAYPALISHIRING', 4))