Zigzag Conversion

ㅋㅋ·2023년 2월 3일
0

알고리즘-leetcode

목록 보기
104/135

문자열 s와 행의 수 numRows를 받는다.

문자열 s를 numRows 행의 지그재그 패턴으로 만들 때,

위에서부터 행방향으로 읽은 문자열을 만들어 반환하는 문제이다.

예를 들어 ABCDEFGHI이라는 문자열을 받고 3행 지그재그 패턴으로 만들면 아래와 같고

A   E   I
B D F H
C   G

이를 위에서부터 행방향으로 읽으면 'AEIBDFHCH'가 된다.

class Solution {
public:
    string convert(string s, int numRows) {

        if (numRows == 1)
        {
            return s;
        }

        vector<string> zigzag(numRows);

        int rowIndex{0};
        int adder{1};
        int length = s.size();

        for (char& c : s)
        {
            zigzag[rowIndex] += c;

            rowIndex += adder;
            if (rowIndex == -1 || numRows == rowIndex)
            {
                adder *= -1;
                rowIndex += (2 * adder);
            }
        }

        string result{};
        result.reserve(length);

        for (int i = 0; i < numRows; ++i)
        {
            result.append(zigzag[i]);
        }

        return result;
    }
};

0개의 댓글