将字符串 "PAYPALISHIRING"
以Z字形排列成给定的行数:
P A H N A P L S I I G Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
实现一个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "PAYPALISHIRING", numRows = 3 输出: "PAHNAPLSIIGYIR"
示例 2:
输入: s = "PAYPALISHIRING", numRows = 4 输出: "PINALSIGYAHRPI" 解释: P I N A L S I G Y A H R P I
瞎搞题,模拟下就好了
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1)
{
return s;
}
map<int, vector<int> > tmp;
int idx = 0, flag = 0;
for (int i = 0; i < s.length(); ++i)
{
tmp[idx].push_back(i);
if (idx == 0)
{
flag = 1;
}
else if (idx == numRows - 1)
{
flag = 0;
}
if (flag)
{
++idx;
}
else
{
--idx;
}
}
string ans("");
for (map<int, vector<int> >::iterator it = tmp.begin(); it != tmp.end(); ++it)
{
for (int i = 0; i < it->second.size(); ++i)
{
ans += s[it->second[i]];
}
}
return ans;
}
};