Leetcode题库 6.Z字形变换(C实现)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode题库 6.Z字形变换(C实现)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 思路
- 代碼
思路
將字符串s使用字符’@‘填充至W形或者V形
得到頂點與谷點分別存于New_start,New_end
外層循環(huán)遍歷第1行至第numRows行
內(nèi)層循環(huán)遍歷每一行
例:
代碼
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; }總結(jié)
以上是生活随笔為你收集整理的Leetcode题库 6.Z字形变换(C实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode题库 94.二叉树的中序
- 下一篇: Leetcode题库 32.从上到下打印