思路1:自己想到的最直观的思路,观察每一行的数的规律,进行解决,但是自己写乱了,没有AC.
思路2:首先构建一个Vector<string>数组,Vector中的每一个元素代表某一行的字符串。从左到右扫描原始字符串,然后按照顺序将字符插入对应行的字符串中。
1.vector<string> rows(10); 初始生成一个容量为10的数组
2.curRow,定义为行的游标,指示目前所处的行位置 ;goingDown,利用goingDown游标来控制是上行还是下行,在curRow == 0 或 curRow == numRows - 1的时候取非
3.curRow += goingDown ? 1 : -1; 三目运算符优先运算
4. for(char c : s) ; for(string row : rows) 对 s和rows进行遍历
class Solution { public: string convert(string s, int numRows) { //很自然的字符,按照顺序进行扫描 if (numRows == 1) return s; vector<string> rows(min(numRows, int(s.size()))); int curRow = 0; bool goingDown = false; for (char c : s) { rows[curRow] += c; if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown; curRow += goingDown ? 1 : -1; //三目运算符,优先级高于赋值运算符 } string ret; for (string row : rows) ret += row; //把ret拼接起来 return ret; } };