传送门: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;}
};