LeetCode刷题(C++)——ZigZag Conversion(Medium)

xiaoxiao2021-02-27  490

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".

思路:之字形转换如下:

                                   

观察可以发现:竖着的每一列都有numRows个元素,斜着的有numRows-2个元素,于是我们可以把竖着的一列和斜着的一列看成是一个循环周期,按照从上到下在从左下角到右上角的顺序存储字符。设置一个string数组,行数为numRows。

class Solution { public: string convert(string s, int numRows) { if (s.empty()) return ""; if (s.size() == 1) return s; string *ss = new string[numRows]; int i = 0, gap = numRows - 2; while (i < s.size()) { for (int j = 0; j < numRows&&i < s.size();++j) ss[j] += s[i++]; for (int j = gap;j > 0 && i < s.size();--j) ss[j] += s[i++]; } string str; for (int i = 0; i < numRows;i++) str += ss[i]; delete[] ss; ss = NULL; return str; } };

转载请注明原文地址: https://www.6miu.com/read-579.html

最新回复(0)