Разбор задачи 6. Zigzag Conversion LeetCode.com

Зигзагообразное преобразование

Строка "PAYPALISHIRING"записывается зигзагообразным узором в заданном количестве рядов следующим образом: (вы можете захотеть отобразить этот узор фиксированным шрифтом для лучшей читаемости)

ПАН
АПЛСИИГ
YIR

А потом читать строчку за строчкой:"PAHNAPLSIIGYIR"

Напишите код, который будет принимать строку и выполнять это преобразование с заданным количеством строк:

преобразование строки (строка s, int numRows);

Пример 1:

Ввод: s = "PAYPALISHIRING", numRows = 3
 Вывод: "PAHNAPLSIIGYIR"

Пример 2:

Ввод: s = "PAYPALISHIRING", numRows = 4
 Вывод: "PINALSIGYAHRPI"
 Объяснение:
ПРИКОЛОТЬ
АЛСИГ
ЯХР
ПИ

Пример 3:

Ввод: s = "A", numRows = 1
 Вывод: "A"
Ограничения:
1 <= s.length <= 1000
sсостоит из английских букв (строчных и прописных) 
','и 
'.'.
1 <= numRows <= 1000

Решение данной задачи можно осуществить следующим образом:

  1. Создать пустой список (список) строк, количество элементов в списке должно быть равно заданному количеству строк (numRows).
  2. Создать переменную (переменную) для представления списка в списке (строке).
  3. Создать флаг (флаг) для направления движения по строке (направление).
  4. Итерироваться по каждому символу в заданной строке.
  5. Добавить символ в соответствующую заявку в списке.
  6. Если достигнута последняя строка, измените направление движения регулятора на «вверх».
  7. Если достигнута первая строка, изменить направление движения регулятора на «вниз».
  8. Увеличивать или уменьшать переменную амплитуды зависимости от регулятора направления движения.
  9. Соедините все строки из списка в одной строке и верните ее в качестве результата.

Ниже приведены примеры решений данной задачи

Решение задачи «Зигзагообразное преобразование» пример кода на Python

class Solution(object):
    def convert(self, s, numRows):
        # Если только одна строка, возвращаем исходную строку
        if numRows == 1:
            return s
        
        # Создаем пустой список строк, количество строк равно numRows
        rows = [''] * numRows
        
        # Переменная для отслеживания текущей строки и направления движения по строкам
        row, direction = 0, 1
        
        # Итерируемся по каждому символу в строке s
        for char in s:
            # Добавляем текущий символ в соответствующую строку в списке rows
            rows[row] += char
            
            # Если достигнута первая строка, изменяем направление движения на "вниз"
            # Если достигнута последняя строка, изменяем направление движения на "вверх"
            if row == 0:
                direction = 1
            elif row == numRows - 1:
                direction = -1
            
            # Увеличиваем или уменьшаем переменную текущей строки в зависимости от направления движения
            row += direction
        
        # Соединяем все строки из списка rows в одну строку и возвращаем ее в качестве результата
        return ''.join(rows)

Решение задачи «Зигзагообразное преобразование» пример кода на Java

class Solution {
    public String convert(String s, int numRows) {
        // Проверяем, если numRows равно 1, возвращаем исходную строку
        if (numRows == 1) {
            return s;
        }
        
        // Создаем массив строк rows длиной numRows и заполняем его пустыми строками
        String[] rows = new String[numRows];
        for (int i = 0; i < numRows; i++) {
            rows[i] = "";
        }
        
        // Инициализируем переменные текущей строки row и направления direction
        int row = 0;
        int direction = 1;
        
        // Итерируемся по каждому символу в заданной строке s
        for (char c : s.toCharArray()) {
            // Добавляем текущий символ c в соответствующую строку rows[row]
            rows[row] += c;
            // Если достигнута первая строка, меняем направление на "вниз" (direction = 1)
            if (row == 0) {
                direction = 1;
            // Если достигнута последняя строка, меняем направление на "вверх" (direction = -1)
            } else if (row == numRows - 1) {
                direction = -1;
            }
            // Увеличиваем или уменьшаем переменную текущей строки row в зависимости от направления direction
            row += direction;
        }
        
        // Объединяем все строки из массива rows в одну строку result и возвращаем ее
        String result = "";
        for (String rowString : rows) {
            result += rowString;
        }
        
        return result;
    }
}

Решение задачи «Зигзагообразное преобразование» пример кода на C++

class Solution {
public:
    string convert(string s, int numRows) {
        // Если строка имеет только одну строку, возвращаем исходную строку
		if (numRows == 1) { 
            return s;
        }
        
        // Создаем вектор с заданным количеством строк
		vector<string> rows(numRows); 
        // Инициализируем переменную текущей строки
		int row = 0; 
        // Инициализируем флаг направления движения по строкам
		int direction = 1; 
        
        // Итерируемся по каждому символу в заданной строке
		for (char c : s) { 
            // Добавляем текущий символ в соответствующую строку в векторе
			rows[row] += c; 
            // Если достигнута первая строка, изменяем флаг направления движения на "вниз"
			if (row == 0) { 
                direction = 1;
            } 
			// Если достигнута последняя строка, изменяем флаг направления движения на "вверх"
			else if (row == numRows - 1) { 
                direction = -1;
            }
			// Увеличиваем или уменьшаем переменную текущей строки в зависимости от флага направления движения
            row += direction; 
        }
        
        // Инициализируем результирующую строку
		string result = ""; 
		// Объединяем все строки из вектора в одну строку
        for (string rowString : rows) { 
            result += rowString;
        }
        
        // Возвращаем результирующую строку
		return result; 
    }
};

Решение задачи «Зигзагообразное преобразование» пример кода на JavaScript

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
  // если numRows равно 1, вернуть исходную строку
  if (numRows === 1) return s;

  // создаем массив, содержащий numRows пустых строк
  const rows = new Array(numRows).fill('');
  let currentRow = 0;
  let goingDown = false;

  // итерируемся по каждому символу в исходной строке
  for (const char of s) {
    rows[currentRow] += char;
    // меняем направление движения, если достигнута верхняя или нижняя границы зигзага
    if (currentRow === 0 || currentRow === numRows - 1) goingDown = !goingDown;
    // изменяем текущую строку в соответствии с направлением движения
    currentRow += goingDown ? 1 : -1;
  }

  // соединяем все строки в одну строку и возвращаем ее
  return rows.join('');
};

Решение задачи «Зигзагообразное преобразование» пример кода на C#

public class Solution {
    public string Convert(string s, int numRows) {
        // если numRows равно 1, то просто возвращаем текст, т.к. нет необходимости менять его
        if (numRows == 1) return s;

        // создаем массив строк для каждой строки зигзага
        string[] rows = new string[numRows];
        
        // индекс текущей строки зигзага
        int currentRow = 0;
        
        // флаг, указывающий направление движения по строкам зигзага (вверх или вниз)
        bool goingDown = false;

        // проходимся по всем символам текста и добавляем их в соответствующую строку зигзага
        foreach (char c in s) {
            rows[currentRow] += c;
            // если достигли верхней или нижней границы зигзага, меняем направление движения
            if (currentRow == 0 || currentRow == numRows - 1) goingDown = !goingDown;
            // изменяем индекс текущей строки зигзага в зависимости от направления движения
            currentRow += goingDown ? 1 : -1;
        }

        // объединяем строки зигзага в одну строку и возвращаем ее
        return string.Join("", rows);
    }
}

Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы

Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x