[LeetCode, 리트코드] ZigZag Conversion
- 카테고리 없음
- 2018. 11. 20. 06:40
반응형
1. Problem
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
주어진 행에서 지그재그 패턴으로 쓰여진 "PAYPALISHIRING" 문자열은 다음과 같다.
P A H N A P L S I I G Y I R
위 문자열은 위에서부터 오른쪽으로 다음과 같이 읽는다. "PAHNAPLSIIGYIR"
위와 같이 문자열이 읽히도록 하는 코드를 작성하라
string convert(string s, int numRows);
Example 1:
Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR"
Example 2:
Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I
2. Solution
복잡하게 생각하지 말고 간단하게 접근하는 것이 좋다. 변형된 문자열에서 각 행들을 수평분할했을 시의 부분문자열들을 저장하는 eachRowString 배열을 만든다. 그리고 하나씩 순회하면서 마지막 row와 맨 첫번 째 row에 도달했을 시 순회방향을 바꾸어 주면 된다.
3. What I solved
class Solution { public: string convert(string s, int numRows) { if(numRows == 1) return s; vectoreachRowString(1000, ""); int row = 1; bool updown = true; // 아래가 true 위가 false for(char c : s){ eachRowString[row-1] += c; if(row == numRows && updown){ updown = false; } else if(row == 1 && !updown) { updown = true; } if(updown) row++; else row--; } string ret = ""; for(string s : eachRowString){ ret += s; } return ret; } };
4. Best Solution
위와 동일
반응형
이 글을 공유하기