/*
* 算法思想:
* 使用numRows个字符数组,分别存储每行的字符;
* 按照之字形的方式分别将所给字符填进numRows个字符数组;
* 最后将numRows个字符数组中的字符取出来放到s数组中,返回s即可。
*
*
*/
int get_len(char *s){
int i=0;
while(*s != '\0'){
s++;
i++;
}
return i;
}
char * convert(char * s, int numRows){
int len = get_len(s);
/* 一行时,以及长度为0时候,不需要 */
if(!len || numRows <= 1){
return s;
}
char arr[numRows][len+1];
int indexs[numRows];
memset(arr, 0, sizeof(arr));
memset(indexs, 0, sizeof(indexs));
int i = 0;
int derect = 0;
int flag = 0;/* 用于表示是行数递增方向还是递减方向 */
while(s[i] != '\0' ){
if(flag == 0){
/* 递增方向 */
arr[derect][indexs[derect]++] = s[i++];
derect++;
/* 递增到头的时候,将其回头 */
if(derect >= numRows){
flag = 1;
derect -= 2;
}
}else {
/* 递减方向 */
arr[derect][indexs[derect]++] = s[i++];
derect--;
/* 递减到头的时候,将其回头 */
if(derect < 0){
flag = 0;
derect += 2;
}
}
}
int index = 0;
int j=0;
/* 取每行的字符放到字符串s中 */
for(i=0; i<numRows; i++){
j=0;
while(arr[i][j] != 0){
s[index++] = arr[i][j++];
}
}
return s;
}
LeetCode-6-之字形变换-C语言
猜你喜欢
转载自blog.csdn.net/weixin_36094222/article/details/90115945
今日推荐
周排行