题目描述:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列(实际是N字形排列)
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
输出:"LCIRETOESIIGEDHN"
方法一:直接遍历
思路:时间复杂度O(n),空间复杂度O(n)
【1】申请行数为min(字符串长度,行数)的数组,存储每行的字符
【2】对字符串进行遍历,每到达顶端或底端对方向进行逆转
【3】对各数组进行拼接
string convert(string s, int numRows) {
if (numRows == 1) //只有一行
return s;
int length = s.length();
int capacity = min(length, numRows);
vector<string> vec(capacity); //存放每行字符的容器
int flag = 1, index = 0; //表明方向,容器下标
for (int i = 0;i < s.length();++i) {
vec[index] += s[i];
index += flag;
//到达顶端或底端改变方向
if (index == 0 || index == numRows - 1) {
flag *= -1;
}
}
//进行拼接
string ans = "";
for (int i = 0;i < capacity;++i) {
ans += vec[i];
}
return ans;
}
字符串Z字形排列及直接遍历解法

博客介绍将给定字符串按指定行数进行Z字形(实际N字形)排列的问题。如输入“LEETCODEISHIRING”,行数为3时,有特定排列方式及输出结果。还给出直接遍历的解法,包括申请数组存字符、遍历字符串逆转方向、拼接数组等步骤,时间和空间复杂度均为O(n)。
1117

被折叠的 条评论
为什么被折叠?



