6. ZigZag Conversion

来源:互联网 发布:数据监控软件 编辑:程序博客网 时间:2024/06/11 23:33

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   NA P L S I I GY   I   R
And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conve rsion given a number of rows:

string convert(string text, int nRows);

convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

解题思路:ZigZag转化的结果其实算是倒Z字图像的并列,所以这是个周期性的图行,我们可以"",作为一个周期,周期的长度是2*ROW-2,,在考虑周内的情况,因为,除了第一行和最后一行,其余行在周期内会有两个字母,通过简单的推导他们的间隔是2(ROW-ROWi)-2,ROWi是第几行的行数,;所以代码如下:

class Solution {public:      string convert(string s, int numRows) {  if (numRows <= 1|| numRows >=  s.size()) {return s;  }      string s_c="";  int i,j,j2;  int maxCd = 2 * numRows - 2;  int cd;  for (i = 0; i < numRows; i++) {j = i;    cd = 2 * (numRows - i) - 2;while (j < s.size()) {s_c += s[j];j2 = j + cd;if(j2 <s.size()&& cd != 0&& cd != maxCd){    s_c += s[j2];}j = j+ maxCd;     }      }      return s_c;     }};

运行结果:






原创粉丝点击