将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
char * convert(char * s, int numRows){
int n=strlen(s);
if (numRows == 1 || numRows >= n) {
return s;
}
int Cols=(numRows-1)*(n/(2*numRows-2)+1);
char c[numRows][Cols];
for(int i=0;i<Cols;i++){
for(int j=0;j<numRows;j++){
c[j][i]='0';
}
}
int row=0;
int col=0;
int cnt=0;
for(int i=0;i<(n/(2*numRows-2)+1);i++){
for(row=0;row<numRows;row++){
if(cnt+1>n){
break;
}
c[row][col]=s[cnt++];
}
row--;
for(int j=0;j<numRows-2;j++){
if(cnt+1>n)
break;
c[--row][++col]=s[cnt++];
}
col++;
}
int cnt2=0;
for(int i=0;i<numRows;i++){
for(int j=0;j<Cols;j++){
if(c[i][j]!='0')
s[cnt2++]=c[i][j];
}
}
return s;
}