leetcode_num6_Zigzag
来源:互联网 发布:厦门理工软件学院地址 编辑:程序博客网 时间:2024/06/18 08:00
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H NA P L S I I GY I R
And then read line by line: "PAHNAPLSIIGYIR"
找规律
#include<iostream>#include<string>using namespace std;void Line(string s,string *res,int length,int cyclelen,int index,int nRows);string convert(string s, int nRows) {int length=s.length();if(length<=0||nRows<0)return NULL;if(nRows==0||nRows==1)return s;int cyclelen=2*nRows-2;string *res=new string[nRows];for(int i=0;i<nRows;i++)res[i]="";Line(s,res,length,cyclelen,0,nRows);Line(s,res,length,cyclelen,nRows-1,nRows);if(nRows>2){for(int i=1;i<nRows-1;i++)Line(s,res,length,cyclelen,i,nRows);}string result;for(int i=0;i<nRows;i++)result+=res[i];return result; }void Line(string s,string *res,int length,int cyclelen,int index,int nRows){if((index==0)||(index==nRows-1)){int j=index;while(j<length){res[index]+=s[j];j+=cyclelen;}}else{int j=index;int k=cyclelen-j;while(j<length||k<length){if(j<length)res[index]+=s[j];elsebreak;if(k<length)res[index]+=s[k];elsebreak;j+=cyclelen;k+=cyclelen;}}}void main(){string s="PAYPALISHIRING";string result=convert(s,3);cout<<result<<endl;system("pause");}
0 0