日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode题库 6.Z字形变换(C实现)

發(fā)布時(shí)間:2024/4/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode题库 6.Z字形变换(C实现) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 思路
  • 代碼

思路

將字符串s使用字符’@‘填充至W形或者V形
得到頂點(diǎn)與谷點(diǎn)分別存于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实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。