问题描述:
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".
解题思路:
zigzag在这里就是N字型
如果是空字符串或者nRows小于2直接返回
第0行和最后一行,要输出的字符下标都是相差2*nRows-2,注意下标值不能超过字符串长度
一行一行的输出,首先遍历输出第0行,最后遍历输出第nRows-1行
对于中间的行,多写几个就能观察到这个规律。
算法耗时26ms,如下:
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. if (nRows <= 1 || s.length() == 0) return s; string res = ""; int len = s.length(); for (int i = 0; i < len && i < nRows; ++i) { int index = i; res += s[index]; int k = 1; while ( index < len) { if (i == 0 || i == nRows - 1) { index += 2 * nRows - 2; } else { if (k % 2 ==1) //奇数位 index += 2 * (nRows - 1 - i); else index += 2 * i; } ++k; //判断index合法性 if (index < len) { res += s[index]; } } } return res; } };
LeetCode算法题之ZigZag Conversion
最新推荐文章于 2020-12-18 22:13:40 发布