[leetcode] -6 ZigZag Conversion

zigzag pattern 即之字型,字母“Z”型,convert函数要求将一个Z字形按列读取的字符串转换为按行读取的字符串。

基本思路是按行顺序读取并存入结果字符串,总行数为min(nRows,len),nRows为Z字的行数,len为源字符串的总长度。

下面用图来说明:


行数k=1,nRows时,读取第一个字符后,下一个字符与当前字符在源字符串中的距离为step = 2(nRows-1),依次重复

1<k<nRows时,读取第一个字符后,下一个字符与当前字符在源字符串中的距离为step1 = 2(nRows-k),下一个字符与下下个字符在源字符串中的距离为step2 = 2(k-1),如此以step1,step2进行重复

char* convert(char* s, int numRows) {
	int len = strlen(s);
	int num = 0, i, step1,step2,step, index;
	char *res = (char *)malloc((len+1)*sizeof(char));
	for(i = 1; i <= numRows && i <= len; ++ i){
		index = i;
		if(i == 1 || i == numRows){
			step = 2 * numRows - 2;
			while(index <= len){
				res[num] = s[index-1];
				num ++;
				index += step;
			}
		}else{
			step1 = 2*(numRows - index);
			step2 = 2*(index - 1);
			while(index <= len){
				res[num] = s[index-1];
				num ++;
				index += step1;
				if(index <= len){
					res[num] = s[index-1];
					num ++;
				}
				index += step2;
			}
		}
	}
	res[len] = '\0';
	return res;
}




猜你喜欢

转载自blog.csdn.net/ljh0302/article/details/64440490