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 N A P L S I I G Y 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]; else break; if(k<length) res[index]+=s[k]; else break; j+=cyclelen; k+=cyclelen; } } } void main(){ string s="PAYPALISHIRING"; string result=convert(s,3); cout<<result<<endl; system("pause"); }
原文:http://blog.csdn.net/eliza1130/article/details/44680499