###### Leetcode 第6题 ZIGZAG后，行列输出

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

class Solution {
public:
string convert(string s, int numRows) {
if (s.length() == 0 || numRows == 1)
{
return s;
}
int fag = 2*numRows -2;
char** flag = new char*[numRows];
int tempClum = (s.length() / (numRows * 2 - 2) + 1 )* (numRows - 1) + 2;
for (int i = 0 ; i < numRows; ++i)
{
flag[i] = new char[tempClum];
for (int k = 0; k < tempClum; ++k)
{
flag[i][k] = '\0';
}
}

//按照ZIGZAG输出至矩阵内
int leng = s.length();
for(int i = 0; i < s.length() / (numRows * 2 - 2) + 1; ++i) //有多少次递归
{
int rows = 0;
int clum = i  * (numRows -1);
int j = 0;
for(;j < numRows ; ++j) //第一个处理，从上倒下
{
if (i * (numRows*2 - 2) + j >= s.length())
break;

flag[rows][clum] = s[i * (numRows*2 - 2) + j];
++rows;
}
for (rows = numRows - 2; rows > 0; --rows)  //斜线处理
{
if (i * (numRows*2 - 2) + j >= s.length())
break;
clum++;
flag[rows][clum] = s[i * (numRows*2 - 2) + j];
j++;
}
}

//从矩阵中输出
string temp;
for (int i = 0 ; i < numRows; ++i)
{
for (int k = 0; k < tempClum; ++k)
{
if (flag[i][k] != '\0')
{
string temp1;
temp1 = flag[i][k];
temp.append(temp1);
}
}
}
delete []flag;
return temp;
}
};

1. class Solution {
2. public:
3.     string convert(string s, int nRows) {
4.         // Start typing your C/C++ solution below
5.         // DO NOT write int main() function
6.         string result;
7.         if (nRows < 2) return s;
8.         for (int i = 0;i < nRows;++i) {
9.             for (int j = i;j < s.length();j += 2 * (nRows - 1)) {
10.                 result.push_back(s[j]);
11.                 if (i > 0 && i < nRows - 1) {
12.                     if (j + 2 * (nRows - i - 1) < s.length())
13.                         result.push_back(s[j + 2 * (nRows - i - 1)]);
14.                 }
15.             }
16.         }
17.         return result;
18.     }
19. };

（1）如果当前给出的行只有1行，那么直接输出

（2）如果当前行是第0行或者是第NROW-1，那么相差为2*NROWS - 2；

（3）如果当前行不是第0行或者是第NROW-1，那么相差为2*NROWS - 2 中间还会穿插一个距离为

2*（NROWS - 2 - i）。

#### 【LeetCode】LeetCode——第6题：ZigZag Conversion

2016-04-19 10:09:57

#### 【python】【leetcode】【算法题目6—ZigZag Conversion】

2016-11-26 15:44:31

#### [Java]leetcode6 ZigZag Conversion

2015-04-12 11:17:26

#### LeetCode-6. ZigZag Conversion (JAVA)（之字形转换）

2017-04-17 09:41:03

#### [Leetcode 6] ZigZag问题的一种新思路

2015-08-17 09:17:22

#### leetcode 题解代码整理 6-10题

2015-08-05 15:11:09

#### 【LeetCode】ZigZag Conversion 解题报告

2014-10-26 16:49:26

#### [LeetCode][6]ZigZag Conversion解析与特殊解法 -Java实现

2016-06-06 14:29:53

#### LeetCode系列字符串操作(一)ZigZag输出，寻找最大不重复字串长度。

2015-04-03 15:45:20

#### leetcode第7题，Reverse Integer

2017-02-18 20:30:16

## 不良信息举报

Leetcode 第6题 ZIGZAG后，行列输出