Z 字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
示例
输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
题解分析
模拟法
用store[i]
去存储字符串,最后相加返回。
用bool change
作为标志位判断是 z 字走向是向上还是向下
chang
改变条件:当 i == numRows -1 或者 i == 0
代码展示
string convert(string s, int numRows) {
int sSize = s.size();
int storeSize = sSize > numRows ? sSize : numRows;
string result = "";
int loc = 0;
// 初始 i == 0,设为 false
bool change = false;
vector<string> store(storeSize);
for (int i = 0; i < sSize; i++)
{
store[loc].push_back(s.at(i));
if (loc == numRows - 1 || loc == 0)
{
change = !change;
}
loc += change ? 1 : -1;
}
for (int i = 0; i < storeSize; i++)
{
result = result + store[i];
}
return result;
}
心得
vector<string>
的应用
标志位的应用
时间空间
时间复杂度 O(m+n)
空间复杂度 O(m+n)