将字符串 "PAYPALISHIRING"
以Z字形排列成给定的行数:
P A H N
A P L S I I G
Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
实现一个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"
示例 2:
输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释:
P I N
A L S I G
Y A H R
P I
public class Solution {
public string Convert(string s, int numRows) {
if (numRows == 1 || s.Length <= 1)
return s;
StringBuilder result = new StringBuilder();
int space = 0;
for (int i = 0; i <= numRows - 2; i++)
{
space += i;
}
space = space * 2;
int b_space = 0;
if(s.Length%(2*numRows - 2) != 0)
{
b_space = s.Length / (2 * numRows - 2) + 1;
}
else
{
b_space = s.Length / (2 * numRows - 2);
}
space = space * b_space;
int col = 0;
if ((space + s.Length) % numRows == 0)
col = (space + s.Length) / numRows;
else
col = (space + s.Length) / numRows + 1;
char[,] all = new char[numRows, col];
for(int i = 0; i < numRows; i++)
{
for(int j = 0; j < col; j++)
{
all[i, j] = ' ';
}
}
int x = 0, y = 0;
bool flag = true;
for(int i = 0;i < s.Length; i++)
{
all[x,y] = s[i];
if (x == numRows - 1)
{
flag = false;
}
if (x == 0)
{
flag = true;
}
if (flag)
x++;
else
{
y++;
x--;
}
}
for (int i = 0; i < numRows; i++)
{
for (int j = 0; j < col; j++)
{
if (all[i, j] != ' ')
result.Append(all[i, j]);
}
}
return result.ToString();
}
}