欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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实现)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。