当前位置:
首页 >
Leetcode题库 6.Z字形变换(C实现)
发布时间:2024/4/18
51
豆豆
生活随笔
收集整理的这篇文章主要介绍了
Leetcode题库 6.Z字形变换(C实现)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 思路
- 代码
思路
将字符串s使用字符’@‘填充至W形或者V形
得到顶点与谷点分别存于New_start,New_end
外层循环遍历第1行至第numRows行
内层循环遍历每一行
例:
代码
char * convert(char * s, int numRows){if(strlen(s)>1 && numRows>1){int L=strlen(s),q=L/(2*numRows-2),r=L%(2*numRows-2),Add=(2*numRows-1-r)%(2*numRows-2);int Len=L+Add;int* New_S=(int*)malloc(sizeof(int)*Len);for(int i=0;i<Len;i++){if(i<L) New_S[i]=s[i];else{New_S[i]=64;}//ascii码 64=@}//头部 int L_start=Len/(2*numRows-2)+1;int* New_start=(int*)malloc(sizeof(int)*L_start);for(int i=0;i<L_start;i++){New_start[i]=1+(2*numRows-2)*i;}//尾部int* New_end=(int*)malloc(sizeof(int)*(L_start-1));for(int i=0;i<L_start-1;i++){New_end[i]=New_start[i]+(numRows-1);}//填充开始int pos=-1;//头部填充:1 L_startfor(int i=0;i<L_start;i++){if(New_S[New_start[i]-1]!=64)s[++pos]=New_S[New_start[i]-1];}//中部填充:2~numRows 2*(L_start-1)for(int i=0;i<numRows-2;i++){for(int j=0;j<L_start;j++){if(j==0 && New_start[0]-1+1+i<Len && New_S[New_start[0]-1+1+i]!=64){s[++pos]=New_S[New_start[0]-1+1+i];}else{if(j==L_start-1 && New_start[L_start-1]-1-1-i<Len && New_S[New_start[L_start-1]-1-1-i]!=64){s[++pos]=New_S[New_start[L_start-1]-1-1-i];}if(j!=0 && j!=L_start-1){if(New_start[j]-1-1-i<Len && New_S[New_start[j]-1-1-i]!=64) {s[++pos]=New_S[New_start[j]-1-1-i];}if(New_start[j]-1+1+i<Len && New_S[New_start[j]-1+1+i]!=64) {s[++pos]=New_S[New_start[j]-1+1+i];}}}}}//尾部填充:numRows L_start-1for(int i=0;i<L_start-1;i++){if(New_S[New_end[i]-1]!=64)s[++pos]=New_S[New_end[i]-1];}}return s; }总结
以上是生活随笔为你收集整理的Leetcode题库 6.Z字形变换(C实现)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Leetcode题库 94.二叉树的中序
- 下一篇: Leetcode题库 32.从上到下打印