LeetCode|LeetCode 6

6. ZigZag Conversion 字符串“PAYPALISHIRING”,给定一个行数,使用zigzag模式,可以表示为:

LeetCode|LeetCode 6
文章图片
image.png 然后,按照正常行的顺序读取,字符串为:"PAHNAPLSIIGYIR",任务就是,写代码来完成这个转换
string convert(string s, int numRows)

  • Example 1
输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
  • Example 2
输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
思路 【LeetCode|LeetCode 6】这个问题我们只要统计每一行的字符就可以了。规律就是,从第0个字符开始,每下一个字符在下一行,一直到第n行,也就是n-1个字符,之后每个字符在之前字符的上一行,再回到第0行,这样一直重复,一直到结束。
#include #include #include #include using namespace std; class Solution { public: string convert(string s, int numRows) { if (numRows == 1) return s; vector v(numRows, ""); int step = 1; int row = 0; for (auto c : s) { v[row].push_back(c); row += step; if (row == numRows - 1) step = -1; if (row == 0) step = 1; } string res; for (auto x : v) res.append(x); return res; } }; int main() { Solution solver; cout << solver.convert("PAYPALISHIRING", 3).c_str() << endl; cout << solver.convert("PAYPALISHIRING", 4).c_str() << endl; getchar(); }

LeetCode|LeetCode 6
文章图片
image.png

    推荐阅读