描述
给定一个长度为 n 的字符串和一个指定行数 k ,请你从上到下,从左到右地把这个字符串转换成 z 字形,一共 n 行。
例如输入的字符串是 “nowcoder”,k=3,则转换成的 z 字形是
n o
ocdr
w e
然后返回这个新字符串,noocdrwe
数据范围:1≤n,k≤10 ^5
,字符串中仅包含小写英文字母。
示例1
输入:
"nowcoder",3
返回值:
"noocdrwe"
c++
class Solution {
public:
string zconvert(string str, int k) {
int length=str.size();
if (k==1) return str;
vector<string> rows(min(length, k));
bool flag=false;
int i=0;
for (char c:str) {
rows[i]+=c;
if (i==0 || i==k-1) flag=!flag;
i+=flag?1:-1;
}
string result;
for (auto row:rows) result+=row;
return result;
}
};