传送门:Z字形变换
转自:Z字形变换
Thought/思路
关键点在于,最后的答案是一行行连接起来的。
这样我们就会发现,这个 Z
字,实际上会让行数 不断加 1
,然后又 不断减 1
。每次按顺序选择 S
中的一个字符即可。
Code/代码
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1) return s;
std::map<int, std::vector <std::string>> mp;
int now = 0, dir = 1;
for (int i = 0; i < s.length(); ++ i) {
if (dir == 1) now ++;
if (dir == 0) now --;
mp[now].push_back(s.substr(i, 1));
if (now == numRows) dir = 0;
if (now == 1) dir = 1;
}
std::string ans = "";
for (int i = 1; i <= numRows; ++ i) {
for (auto &item : mp[i]) {
ans += item;
}
}
return ans;
}
};