题目描述:
将字符串 "PAYPALISHIRING"
以Z字形排列成给定的行数:
P A H N
A P L S I I G
Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
实现一个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"
示例 2:
输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释:
P I N
A L S I G
Y A H R
P I
代码:
char* convert(char* s, int numRows) {
int len = strlen(s);
if (numRows < 2){
return s;
}
int i = 0;
int n = 2 * numRows - 2;
int* parray = (int*)malloc(sizeof(int)*(len*2));
char* ret = (char*)malloc(sizeof(char)*(len + 1));
for (i = 0; i < len;){
if (i % n == 0){
for (int j = 0; i < len && j < numRows; j++){
parray[i++] = j;
}
}
else{
for (int k = numRows - 2; k > 0; k--)
{
parray[i++] = k;
}
}
}
int k = 0;
for (int j = 0; j < numRows; j++){
for (i = 0; i < len; i++){
if (parray[i] == j){
ret[k++] = s[i];
}
}
}
ret[len] = '\0';
return ret;
}