题目描述:
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING"
行数为 3 时,排列如下:
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"
。
请你实现这个将字符串进行指定行数变换的函数:
解题:
参考官方答案
C++ string类的size()和length()的返回值是无符号数,在写程序的时候将一个int型数值与其返回值比较时,需转为int
class Solution {
public:
string convert(string s, int numRows) {
if(numRows==1||s.size()<=numRows)
return s;
int num=min(numRows,int(s.size()));
vector<string> rows(num);
int a=0;
bool b=false;
for(char& c:s){
rows[a]+=c;
if(a==0||a==numRows-1)
b=!b;
if(b) a+=1;
else a-=1;
}
string result;
for(string& row:rows) result+=row;
return result;
}
};
执行结果: