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"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
思考:画图,找出间隔规律。
class Solution { public: string convert(string s, int nRows) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. int len=s.length(); string s1(len,'a'); int gap=2*nRows-2; int i,j,k; i=0;//s1下标 j=0;//行 int index=0;//对应s下标 if(nRows==1) return s; while(i<len) { index=j; if(j==0||j==(nRows-1)) { while(index<len) { s1[i]=s[index]; index+=gap; i++; } } else { s1[i]=s[index]; while(index<len) /*内部也要判断*/ { i++; index+=gap-2*j; if(index>=len) break; s1[i]=s[index]; i++; index+=2*j; if(index>=len) break; s1[i]=s[index]; } } j++; } return s1; } };
当不满足while条件时,还要运行完while语句才会跳出循环。在此mark,祭奠我像傻子一样的一个小时。