本题最简便的方法是去找相邻输出字母间下标的规律,如图所示:
这里要注意最后一行的规律:
class Solution {
public:
string convert(string s, int numRows) {
int MaxSub=2*(numRows-1);
int j=0;
int len=s.length();
string res;
for(int i=0;i<numRows;i++){
j=i;
int flag=0;
int MaxSubCur=MaxSub-i*2;
if(MaxSubCur==0) MaxSubCur=MaxSub;
while(j<len){
res+=s[j];
if(flag==0){
j=j+MaxSubCur;
flag=1;
}
else{
j=j+(MaxSub-MaxSubCur);
if(MaxSub-MaxSubCur==0) j=j+MaxSub;
flag=0;
}
}
}
return res;
}
};