zigzag convert
char* convert(char* s, int numRows) { if(numRows<=1||strlen(s)<numRows)return s; char *res=(char*)malloc(sizeof(char)*(strlen(s)+1)); int flag=0; int j=0; int count=0; for(int i=0;i<numRows;i++){ j=i; flag=0; while(j<strlen(s)){ res[count++]=s[j]; if(i==0||i==numRows-1){ j+=2*(numRows-1); } else{ if(flag==0){ j+=2*(numRows-i-1); flag=1; } else{ j+=2*i; flag=0; } } } } res[count]='\0'; return res; }
zigzag问题很简单。我们的处理办法是这样的:
对于1,2,3,4,5,6.。。。。。。
当numRows=1时:
输出:1 2 3 4 5 6 7 8 9......
当numRows=2时:输出:
1 3 5 7 9....
2 4 6 8 10...
当numRows=3时:输出:
1 5 9。。
2 4 6 8 10..
3 7 11..
当numRows=4时:输出:
1 7 13...
2 6 8 12 14...
3 5 9 11 15....
4 10 16...
这样我们可以看出(行按1开始计算):
1 第i行的第一个元素输出i
2 第1行和最后一行相邻两个元素之间的差距是2*(numRows-1)
3 除第一行和最后一行外的各行,相邻两个元素之间的差距按2*(numRows-1)和2*(i-1)交替
根据以上3 个结论很容易得到上面的代码。
posted on 2016-11-22 16:18 lichao_normal 阅读(92) 评论(0) 收藏 举报
浙公网安备 33010602011771号