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 RAnd 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次。调试运行一次就能理解了。
public string Convert(string s, int numRows)
{
if (numRows == 1)
return s;
string[] res = new string[numRows];
int i = 0, j, k = numRows - 2,len=s.Length;
while (i<len)
{
for (j = 0; i < len && j < numRows; j++)
res[j] += s[i++];
for (j = k; i < len && j >0; j--)
res[j] += s[i++];
}
string str = "";
for (i = 0; i < numRows; i++)
str += res[i];
return str;
}