思路
1.文字轉換有固定規則
2.在長度內有序取數
代碼
char* convert(char* s, int numRows) {
int len = 0, gap = 0, i = 0, j = 0, index = 0, next_j = 0;
char *ret_s = NULL;
if (NULL == s)
{
return NULL;
}
if (numRows < 2)
{
return s;
}
len = strlen(s);
gap = numRows*2 - 2;//1個循環體間隔Z去掉最后一橫的部分,也是每一排除掉中間部分的間隔位
/*
numRows = 3
0 4 8
1 3 5 7 9
2 6
*/
ret_s = malloc(len + 1);
memset(ret_s, 0, len);
for (i = 0; i < numRows; i++)
{
for (j = i; j < len; j += gap)
{
ret_s[index] = s[j];//間隔添加數據04815926
index++;
next_j = j + gap - i * 2;
if (i != 0 && i != (numRows - 1) && next_j < len)//去掉第1排與最后排(無特殊數據)
{
ret_s[index] = s[next_j];//添加特殊數據37
index++;
}
}
}
ret_s[len] = '\0';
return ret_s;
}