string convert(string s, int nRows) {
int len = s.length();
if (len < 3 || nRows == 1)
return s;
bool down = true;
vector<vector<int> > tab(nRows);
for(int i = 0, row = 0; i < len;) {
if(down && row < nRows)
tab[row++].push_back(s[i++]);
else if(!down && row >= 0)
tab[row--].push_back(s[i++]);
if(row < 0 || row >= nRows) {
row += (down ? -2 : 2);
down = !down;
}
}
string ret = "";
vector<vector<int> >::iterator it = tab.begin();
for(; it != tab.end(); ++it) {
vector<int>::iterator it2 = (*it).begin();
for(; it2 != (*it).end(); ++it2) ret += *it2;
}
return ret;
}
边界值 len < 3 || nRows == 1
设置down标志
1.down && row < nRows 则tab[row++].push_back(s[i++]);
2 (!down && row >= 0则tab[row--].push_back(s[i++]);
3.row < 0 || row >= nRows 则 改变标志,+2或者-2